我的项目是这样的:
project
??? test
? ??? CMakeLists.txt
? ??? main.cpp
? ??? test_class1.cpp
??? CMakeLists.txt
??? main.cpp
??? ...
??? class1.h
??? class1.cpp
Run Code Online (Sandbox Code Playgroud)
我想重用为项目二进制文件编译的 class1.o。默认的 CMake 行为也对其进行了两次编译以进行测试。我尝试使用 OBJECT 库,但它把所有对象都放在这个库变量中。然后编译器打印
main.cpp:(.text.startup+0x0): `main' 的多重定义
这意味着在一个目标中有 2 个不同的 main.o。来自主项目编译的所有其他 *.o 文件都是。
如何排除不需要的 *.o 文件?
我通常做的是将应用程序逻辑分离到一个静态库(子目录)中,然后由主应用程序和测试使用。
您也可以将其保存在单个目录中,但是在构建对象库时您仍然需要排除 main.cpp,否则您main在构建测试时确实会有多个定义(如 main.cpp 和测试主要)。
如果您明确列出文件(强烈建议 CMake 使用),您可以简单地从列表中省略 main.cpp。如果您使用通配符列出文件,则可以按照此处所述从列表中删除文件:如何从 cmake `file(GLOB ... )` 模式中排除单个文件?
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |