gpt4 book ai didi

CMake 目标取决于已安装的目标

转载 作者:行者123 更新时间:2023-12-02 03:07:32 28 4
gpt4 key购买 nike

我已经搜索过这个,但也许我使用了错误的措辞;我希望在安装另一个目标后构建一个 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})

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

谢谢!

最佳答案

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

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

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

关于CMake 目标取决于已安装的目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41751574/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com