如何在不影响移植性的情况下使用预编译头文件

Tommy 2003-03-26 03:53:53
众所周知,VC中通过包含stdafx.h,提供了头文件的预编译功能(Precompiled Header),现在遇到一个问题:

我的程序分为两个部分:界面和实现。界面部分用MFC实现,通过stdafx.h实现头文件的预编译,考虑到移植性,实现部分用STL及其它可以移植的东西实现,如果在实现部分不使用预编译头文件的话,编译效率非常低,所以希望使用该功能。

1、由于程序如果放到其它要平台上的话,是没有stdafx.h的,因此我想通过条件编译包含stdafx.h,但是指出#endif错误。不能通过编译
#ifdef _MSC_VER
#include "stdafx.h"
#endif

2、第一种方法不行,又考虑前台和后台用不同的PCH文件,但是,PCH文件名只能在项目的属性中设置,不能为单独文件设置,整个项目只能使用同一个PCH文件,所以也有问题。

不知各位大虾对于这方面有什么研究?
...全文
209 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tommy 2003-03-27
  • 打赏
  • 举报
回复
如果不用IDE的话,在CL的命令行中可以指定用哪个头文件,生成哪个.pch作为预编译头文件,这样就可以实现一个项目中使用不同的预编译头文件。
可以在IDE中,项目参数中指定了.pch文件名,而且还不可以修改,所以所有文件只能使用相同的预编译头文件,最多是部分文件使用,部分文件不使用
Tommy 2003-03-27
  • 打赏
  • 举报
回复
to gboy:

呵呵,就是因为关掉预编译头的话,编译得太慢了,所以不得不想办法利用这个功能。
用stdafx.h的话,在其它平台上,明明不需要,还要带上一个空文件,挺讨厌的,不过,如果没有好办法的话,也只好这样了。
换名也试过,不过我的前台文件也是和其它项目共享的,可是牵一发到全身啊。

to fang_jb:

上面我已经说过了,我的程序为前、后台两块,前台是MFC的,肯定不考虑跨平台的问题,后台是标准C++写的,跨平台是没有问题的。
fang_jb 2003-03-27
  • 打赏
  • 举报
回复
用MFC跨平台?
你用C++跨平台,我还能勉强相信一点,MFC怎么跨?
gbstar2021 2003-03-27
  • 打赏
  • 举报
回复
或者把预编译头改个名,比如改称 headers.h ,满足自己的虚荣心 ^_^
gbstar2021 2003-03-27
  • 打赏
  • 举报
回复
补充一下,

“在各个cpp中都需要include这个头文件”这样的情况是和 vc 工程设置有关的。如果你不需要可以关掉这个工程中对预编译头的支持。
gbstar2021 2003-03-27
  • 打赏
  • 举报
回复
stdafx.h 并不会影响移植,看着不爽属于心理问题,不是程序问题,难道看着
#ifdef ...
#include <...>
#endif
这样的东西就爽了?

如果实在觉得别扭,就干脆关掉预编译头选项,删除 stdafx.h 吧。
现在的机器速度很快,不会觉得编译太慢的。
rtdb 2003-03-27
  • 打赏
  • 举报
回复
我觉得比每个文件挨个改好多了:)
Tommy 2003-03-27
  • 打赏
  • 举报
回复
to rtdb(东临碣石):

唉,就是看着不爽:(
rtdb 2003-03-27
  • 打赏
  • 举报
回复
告诉你一个最简单的解决方案(我这么多年就是这么用的):

VC中该用#include "stdafx.h"就用,不要动它。
到其它系统中时,
建一个空的stdafx.h文件就万事大吉了!

Tommy 2003-03-27
  • 打赏
  • 举报
回复
VC不能运行在其它平台,但是用VC写的程序不一定不能运行嘛。用VC写的程序,不一定非要使用MFC嘛,也可以只用标准C++的内容。

我的程序中,前台是MFC,不考虑移植,但是后台是标准C++,是可以移植,我在其它平台上只要写一个界面就可以了。

其它C++编译器是不会使用VC的预编译头文件功能,我对此也没有指望,我只是希望在VC中对预编译头文件的支持,不会影响程序在其它平台上的编译,如此而已。

在VC中,标准的预编译头文件是通过stdafx.h进行的,在各个cpp中都需要include这个头文件。显然,我并不希望在程序移植到其它平台时,也带上一个stdafx.h,所以就有了第一个尝,将#include "stdafx.h"放到条件编译中,不过失败了。
gbstar2021 2003-03-27
  • 打赏
  • 举报
回复
只包含stdafx.h,是不能提供预编译功能头文件的,还要在工程设置中设置才行。

用 vc 写跨平台的应用程序? vc 可以运行在其他的平台上吗?

其他 c++ 编译器中使用的工程文件和 vc 是不同的,不会使用 vc 工程设置。
flysundy 2003-03-27
  • 打赏
  • 举报
回复
放在里面能预编译吗?
学习
Tommy 2003-03-27
  • 打赏
  • 举报
回复
但是我是在VC6中通不过编译啊:(
本来以为只在VC中包含这个文件,在别的编译器下不包含就OK了,谁知#include"stdafx.h"不可以放在条件编译语句中的
loopyifly 2003-03-26
  • 打赏
  • 举报
回复
#include "stdafx.h"
是mfc的东东,编译器不认很正常

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧