Ответ 1
Вы можете попробовать использовать установку файлов, а не устанавливать цели. Недостатком является то, что вам придется обрабатывать общие и статические сборки.
install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)
Можно ли использовать install (TARGETS...) с целями, которые определены в каталогах, добавленных с помощью add_subdirectory?
Мой вариант использования - это то, что я хочу построить, например, rpm для gtest. у самого проекта есть CMakeLists.txt без каких-либо инструкций установки. Я хочу создать пакет без добавления этих операторов в CMakeLists.txt из gtest.
У меня есть эта структура каталогов:
+ gtest-1.5.0/...
+ CMakeLists.txt
CMakeLists из gtest-1.5.0 определяет библиотеки следующим образом:
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)
теперь я хочу добавить что-то вроде этого в мой CMakeLists.txt:
add_subdirectory(gtest-1.5.0)
install(TARGETS gtest gtest_main ARCHIVE DESTINATION lib)
но cmake правильно заявляет:
CMake Error at CMakeLists.txt:10 (install):
install TARGETS given target "gtest" which does not exist in this
directory.
Есть ли способ сделать это без патча gtest-1.5.0?
Вы можете попробовать использовать установку файлов, а не устанавливать цели. Недостатком является то, что вам придется обрабатывать общие и статические сборки.
install(FILES gtest-1.5.0/gtest_main.so DESTINATION lib)