c++ - CMake链接另一个项目中的单个类

标签 c++ cmake shared-libraries static-libraries

它是我的第一个 C++ 项目之一,我在使用 CMake 时遇到了问题。

我有一个带有可执行文件的 MyProject,我有一个带有提升单元测试的项目测试。 我尝试了以下方式,但我失败了。显然,我不能以这种方式拥有两个可执行文件,而且我不知道如何修复它。

这是MyProject的CMake

project (MyProject)
find_package( Boost 1.48.0  COMPONENTS thread )
set(MYPROJECT_SRCS main.cpp foo.h foo.cpp)
add_executable(MyProject ${MYPROJECT_SRCS})
target_link_libraries(MyProject  ${Boost_LIBRARIES})

这是测试的 CMake

project (tests)
find_package( Boost 1.48.0 COMPONENTS thread unit_test_framework) 
find_package( Boost 1.48.0  COMPONENTS thread )
include_directories("../MyProject")
set(TEST_SRCS test.cpp )
add_executable(tests ${TEST_SRCS})
target_link_libraries(tests ${Boost_LIBRARIES} MyProject)
add_test( example_test tests )

CMake Error at tests/CMakeLists.txt:13 (target_link_libraries):
Target "MyProject" of type EXECUTABLE may not be linked into another
target. One may link only to STATIC or SHARED libraries, or to executables with the ENABLE_EXPORTS property set.

我尝试“ENABLE_EXPORTS 属性集”,但我认为我做错了。

最佳答案

你不应该将你的可执行文件与测试链接起来,相反你需要在测试源列表中包含你的主项目的源文件:

set(TEST_SRCS test.cpp ../MyProject/foo.cpp)

target_link_libraries(测试 ${Boost_LIBRARIES} )

附言当您想分析测试覆盖率时,它也会很有用。

关于c++ - CMake链接另一个项目中的单个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24313760/

相关文章:

compilation - 限制 CMake include_directories() 范围?

c++ - Matlab 无法正确初始化 C++ 共享库

android - 如何在 Android 运行时导入共享对象库?

c++ - 如何使用 C++ 字符串将大写辅音替换为相应的小写辅音?

c++ - 将 lambda 传递给成员变量的构造函数

c++ - CLion给cmake源文件加上头文件不好吗?

c - 在不知道其原型(prototype)的情况下在运行时动态调用 C 函数

c++ - 编译时 C++ 项目抛出错误 C2228,这不是预期的,因为控件在运行时未到达该点

c++ - 如何使用 STL 中的 slist?

cmake - CMAKE_PROJECT_NAME 和 PROJECT_NAME 之间的区别?