安装(TARGETS ...)和add_subdirectory

Giz*_*wai 21 install cmake

是否可以将install(TARGETS ...)与在add_subdirectory中添加的目录中定义的目标一起使用?

我的用例是,我想为etest构建e.gg rpm.gtest项目恰好有一个没有任何安装语句的CMakeLists.txt.我想构建包而不将这些语句添加到gtest的CMakeLists.txt.

我有这个结果目录结构:

+ gtest-1.5.0/...
+ CMakeLists.txt 
Run Code Online (Sandbox Code Playgroud)

gtest-1.5.0的CMakeLists定义了这样的库:

cxx_static_library(gtest "${cxx_strict}" src/gtest-all.cc)
cxx_static_library(gtest_main "${cxx_strict}" src/gtest_main.cc)
target_link_libraries(gtest_main gtest)
Run Code Online (Sandbox Code Playgroud)

现在我想在我的CMakeLists.txt中添加这样的内容:

add_subdirectory(gtest-1.5.0)
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib)
Run Code Online (Sandbox Code Playgroud)

但是cmake正确地指出:

CMake Error at CMakeLists.txt:10 (install):
  install TARGETS given target "gtest" which does not exist in this
  directory.
Run Code Online (Sandbox Code Playgroud)

有没有办法在没有修补gtest-1.5.0的情况下做到这一点?

Rob*_*ard 8

您可以尝试使用文件安装而不是安装目标.缺点是您必须处理共享和静态构建.

install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)

  • 在确定目标是否存在时,Install命令仅查看当前目录,而不像target_link_libraries扫描所有目标. (3认同)