2013-04-25 5 views
3

Я совершенно новый для CMake и хочу достичь с ним очень «общей» задачи. До сих пор я просто использовал Eclipse CDT с автогенерированными make-файлами. Предположим, что у меня есть два проекта A и B. Строит статическую библиотеку, а B - эту библиотеку. Конечно, при построении B я хочу, чтобы статическая библиотека, созданная A, была обновлена. Таким образом, здание проекта B должно инициировать построение A, если какие-либо изменения были внесены в источниках A. Это поведение по умолчанию Eclipse, когда просто вставляя A в зависимость от B.CMake: В зависимости от другого проекта

Итак, что такое самый простой способ добиться этого с помощью CMake? Я прочитал несколько уроков и подобных вопросов, но никто не дал мне удовлетворительного ответа.

Например, есть учебник http://www.cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets, который может быть решением. Однако для такой простой задачи это кажется довольно сложным. Я должен «установить» цели A, но я не хочу ничего устанавливать, я просто хочу, чтобы B зависел от A. Затем я слышал о ExternalProject_add, но я не знаю, как справиться с этим.

ответ

1

Если вы создаете их из того же CMakeLists файла, указав связь с использованием целевого имени будет достаточно:

add_library(LibraryA ${A_SOURCES} 
target_link_libraries(LibraryA <any libraries that A depends on>) 

add_executable(ProgramB) 
target_link_libraries(ProgramB LibraryA <plus other libraries>) 

Если они не находятся в файле же CMakeLists, то либо включают в себя A строить с использованием ADD_SUBDIRECTORY(), (A является дочерним по B) или создавать их как из одного файла верхнего уровня, используя ADD_SUBDIRECTORY() для каждого из них (A и B - братья и сестры).

+0

Они не находятся в одном файле CMakeLists.txt и файл верхнего уровня отсутствует. Таким образом, я использовал ваше последнее предложение просто используя ADD_SUBDIRECTORY (A) и указав в качестве двоичного файла каталог A как двоичный каталог. Работает как шарм, спасибо! – gexicide

+0

Можете ли вы поделиться своим cmake? У меня такая же проблема, и я совершенно новый для cmake. Не уверен, что я понимаю ADD_SUBDIRECTORY – pdiddy

Смежные вопросы