c++包括CPP文件

c++ including cpp files

本文关键字:文件 CPP 包括 c++      更新时间:2023-10-16

当我在IDE (visual studio或xCode)上工作时,我从不包含cpp文件(只有h文件),一切都编译得很好。

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

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

类似:

#ifdef IDE_KEYWORD
#endif

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

当从命令行编译时,必须在命令行上指定每个源文件- IDE无法帮助此操作,因此您需要手动完成。

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

第二个选项是在单个命令行中列出每个源文件-这将导致编译器依次编译每个源文件,然后(取决于您指定的命令行选项)将目标文件链接在一起。

ide跟踪哪些文件在项目/工作空间中,哪些文件不在。例如,Visual Studio在vcxproj文件中有一个块,它存储了所有的编译单元,如

<ClCompile Include="yourFile.cpp" />
使用ifdef来确定您是否正在使用IDE应该只是将IDE_KEYWORD添加到IDE中的预处理器定义中。那么,如果您在该IDE之外编译,则不会定义IDE_KEYWORD

如果您在Visual Studio中可以

#ifdef _MSC_VER
// your code
#endif

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

错误可能发生,因为你没有编译所有的。cpp文件和/或没有链接所有的目标文件。如果使用g++ g++ -c file.cpp -o file.o对每个文件进行编译的话。然后g++ file1.o file2.o fileN.o -o finalExecutable.exe链接。

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