【问题标题】:CMake target depends on installed targetCMake 目标取决于安装的目标
【发布时间】:2017-01-19 20:57:51
【问题描述】:

我已经搜索过这个,但也许我使用了错误的措辞;我希望在安装另一个目标后构建一个 CMake 目标。

通过一个具体的例子,我希望我的测试包含并链接到一个版本的库,其目录结构类似于实际安装。 目录结构:

project
  lib
    first_library
      header1.hpp
      source1.cpp # this includes "first_library/header1.hpp"
    second_library
      header2.hpp
      source2.cpp # likewise, #include "second_library/header2.hpp"
  tests
    lib1_tests
      test1.cpp # this must include "first_library/header1.hpp"
    lib2_tests
      test2.cpp # likewise, #include "second_library/header2.hpp"

这些都不适合我。在 lib 目录的 CMakeLists.txt 中,我有:

add_library(lib1 STATIC ${lib1_SOURCES} ${lib1_HEADERS})
set_property(TARGET lib1 APPEND
    PROPERTY INCLUDE_DIRECTORIES "${CMAKE_CURRENT_LIST_DIR}/../")
install(TARGETS lib1 EXPORT lib1
    ARCHIVE DESTINATION lib
    INCLUDES DESTINATION include)
install(FILES ${lib1_HEADERS}
    DESTINATION include/my_lib_collection/first_library)

测试有

add_executable(tests "${TEST_SOURCES}")
add_dependencies(tests lib1)
add_dependencies(tests lib2)
target_link_libraries(tests ${GTEST_BOTH_LIBRARIES}
    lib1 lib2)
target_include_directories(tests
    INTERFACE $<INSTALL_INTERFACE:INTERFACE_INCLUDE_DIRECTORIES:include/my_lib_collection>)
set_property(TARGET tests APPEND
    PROPERTY INCLUDE_DIRECTORIES ${GTEST_INCLUDE_DIRS})

最终,我想要的是一个与安装状态兼容的目录结构,并且能够在构建测试时使用这些结构。

谢谢!

【问题讨论】:

  • 你不能安装特定的目标——你只能安装整个项目l。并且 CMake 不提供快速安装的目标。但是,您可以将安装作为其他目标的一部分执行,例如与COMMAND cmake --build . --target installUltimately, what I want is a directory structure that is compatible with the installed state - 您可以在配置或构建阶段在构建目录中创建“安装兼容”结构。只需将头文件复制到公共目录即可。
  • 是的,你是对的。我想我不能只见树木不见森林。我将简单地调整我的标志以匹配我当前的目录结构,它离安装的结构不远。感谢您的提示!

标签: cmake


【解决方案1】:

我遇到了您现在面临的同样问题。 不能说我找到了教科书式的解决方案,但我确实设法解决了它

我有多个子目录,每个子目录都有一个 CmakeList.txt 文件。

有一个分支,所有其他分支都依赖于它的安装 我所做的是使用add_custom_target(而不是add_subdirectory)和该自定义目标中的命令,其中用于构建子目录的命令行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 2023-01-25
    • 2013-12-29
    • 2016-03-30
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多