【问题标题】:CMake link single class in another projectCMake链接另一个项目中的单个类
【发布时间】:2014-06-19 18:23:56
【问题描述】:

这是我的第一个 c++ 项目之一,我遇到了 CMake 问题。

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

这是 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 )

测试/CMakeLists.txt:13 (target_link_libraries) 处的 CMake 错误:
EXECUTABLE 类型的目标“MyProject”不能链接到另一个
目标。一个人只能链接到 STATIC 或 SHARED 库,或者 具有 ENABLE_EXPORTS 属性集的可执行文件。

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

【问题讨论】:

  • 请为您的问题设置更合适的标题。

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


【解决方案1】:

您不应将可执行文件与测试链接,而是需要在测试源列表中包含主项目的源文件:

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

target_link_libraries(tests ${Boost_LIBRARIES} )

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

【讨论】:

  • 你能给我一个简短的例子吗?我是 CMake 的新手!
  • 在您的测试中CMakeList.txt 从我的答案中更改两行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2013-05-19
  • 2022-12-21
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多