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
链接。
如果这看起来很复杂,请查看Makefiles。他们太棒了!
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 生成文件错误 - 找不到文件 - *.cpp
- 如何在文件.cpp gtkmm中声明小部件
- 没有实现文件(.cpp)的派生类
- 如何使用"CMakeLists.txt"中的add_library将整个文件(.cpp,.h等)包含在目录中
- 如何在Linux / Windows操作系统上使用文件*.cpp一步编译下面的代码
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 文件.cpp从Windows到Linux
- Ubuntu C++ 编译器错误: g++: 错误: 文件.cpp: 没有这样的文件或目录
- 如何将文件.cpp编译为本机编译
- 使用模板类时,似乎无法包含除 main 以外的任何 cpp 文件.cpp
- 无法编译C++文件.cpp。C++98模式
- 为什么C++头文件不需要包含实现文件 (.cpp)
- 如何访问位于独立文件(.cpp)中的非成员函数
- 如何在Visual Studio Code中通过键盘快捷键切换头文件/cpp文件
- 如何将数据从stringstream写入文件(CPP)
- 为什么filestream不把空白写入文件cpp ?