c ++包括cpp文件

时间:2016-10-06 15:53:54

标签: c++ include

当我在我的IDE(visual studio或xCode)上工作时,我从不包含cpp文件(只有h文件),所有内容都完美编译。

然而,当我在cmd /终端上编译时(主要是在我的覆盆子pi上)如果我不包含cpp文件,编译器会抛出许多错误,因为他没有读取cpp文件。

为什么? ide如何知道包含当前的cpp文件?有没有办法找出你是通过ide还是终端进行编译?

类似的东西:

#ifdef IDE_KEYWORD
#endif

3 个答案:

答案 0 :(得分:2)

IDE通常会分别编译每个源文件(您将其描述为" cpp文件"),为每个源文件生成一个目标文件,然后链接所有目标文件(和其他库) 。从机制上讲,IDE通过为"项目文件"中列出的每个源文件单独调用编译器来实现这一点。然后链接。

从命令行编译时,需要在命令行中指定每个源文件 - IDE不帮助这样做,因此您需要手动执行。

一个选项是单独编译每个源文件(在单独的命令行中指定每个源文件),然后使用另一个命令将所有目标文件链接在一起以生成可执行文件。实际上,这(或多或少)模仿IDE的功能。

第二个选项是在单个命令行上列出每个源文件 - 这将导致编译器按顺序编译每个源文件,然后(根据您指定的命令行选项)将目标文件链接在一起。

答案 1 :(得分:0)

IDE跟踪项目/工作区中的文件以及不属于哪些文件。例如,Visual Studio在vcxproj文件中有一个块,它存储所有编译单元

<ClCompile Include="yourFile.cpp" />

使用ifdef来确定您是否使用IDE应该只是将IDE_KEYWORD添加到IDE中的预处理器定义。然后,如果您在该IDE之外编译,则不会定义IDE_KEYWORD

答案 2 :(得分:0)

如果您在Visual Studio中,则可以

([^_]+)

如果不是,我想没有办法。

可能会发生错误,因为您没有编译所有.cpp文件和/或不链接所有目标文件。 如果为每个文件使用g ++ #ifdef _MSC_VER // your code #endif 来编译它们。然后g++ -c file.cpp -o file.o进行链接。

如果看起来很复杂,请查看Makefile。他们太棒了!