繁体   English   中英

c ++包括cpp文件

[英]c++ including cpp files

当我在我的 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进行链接。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM