Cmake: добавить зависимость не в подкаталог
Скажем, существует следующая структура каталогов:
root
|
+--projects
| |
| +-test
| |
| +-CMakeFiles.txt
|
+--libs
|
+-testlib
|
+-CMakeFiles.txt
test содержит CMakeFiles.txt, а testlib также содержит CMakeFiles.txt. "test" создает исполняемый файл, а "testlib" создает статическую библиотеку.
Я хочу, чтобы "тест" связывался с "testlib" без использования символических ссылок и без перемещения библиотеки "testlib" в подкаталог в "тесте".
Поскольку "testlib" не является подкаталогом "теста", я не могу сделать
add_subdirectory("../../libs/testlib")
В тесте CMakeFiles.txt - cmake будет жаловаться на то, что "testlib" не находится в подкаталоге "test".
Кроме того, поскольку в системе есть несколько разных компиляторов, я не могу просто установить библиотеки testlib в какой-то центральный каталог, поэтому я хочу, чтобы тест собирал локальную копию testlib и связывался с ней (т.е. как если бы testlib был подкаталог). Я также хочу, чтобы "тестовый" проект автоматически перестраивал "testlib" , если он был изменен.
Итак, как я могу с этим справиться? cmake 2.8.4, winxp sp3.
Ответы
Ответ 1
Вы можете либо предоставить CMakeLists.txt верхнего уровня в root
, либо предоставить двоичный каталог команде add_subdirectory
; например.
add_subdirectory("../../libs/testlib" "${CMAKE_CURRENT_BINARY_DIR}/testlib_build")
Это создает подкаталог под названием testlib_build
в вашем текущем каталоге сборки, который содержит сгенерированные файлы проекта для testlib, но не источник.
Для получения дополнительной информации запустите
cmake --help-command ADD_SUBDIRECTORY
Ответ 2
Единственный способ, которым я это вижу, - создать CMakeLists.txt
в корне и поставить там следующий код:
add_subdirectory(projects/test)
add_subdirectory(lib/testlib)
Когда вы это сделаете, вы можете сделать target_link_libraries(test testlib)
в test/CMakeLists.txt, и он будет автоматически перестроен, если вы что-то измените в testlib.