我的项目是这样的:
project
├── test
│ ├── CMakeLists.txt
│ ├── main.cpp
│ └── test_class1.cpp
├── CMakeLists.txt
├── main.cpp
├── ...
├── class1.h
└── class1.cpp
我想重用为项目二进制编译的class1.o。 默认的CMake行为也会编译两次以进行测试。 我尝试使用OBJECT库,但它将所有对象放在此库变量中。然后编译打印
main.cpp :(。text.startup + 0x0):`main'
的多重定义
这意味着一个目标中有两个不同的main.o.主项目编译中的所有其他* .o文件都是。
如何排除不需要的* .o文件?
答案 0 :(得分:4)
我通常做的是将应用程序逻辑分成静态库(子目录),然后由主应用程序和测试使用。
你也可以将它保存在一个目录中,但是在构建对象库时你仍然需要排除main.cpp,否则在构建测试时你确实会有main
的多个定义(如在main.cpp和test main中定义。
如果要明确列出文件(highly recommended for CMake),则可以省略列表中的main.cpp。如果您使用globbing列出文件,则可以按照此处所述从列表中删除该文件:How do I exclude a single file from a cmake `file(GLOB ... )` pattern?