LINUX.ORG.RU

Немного нубский вопрос по CMake


0

1

Значится нужно мне в директории src/3rdparty собрать кое-какую либу статическую. Для неё уже написал CMakeLists и всё собирается прекрасно. Потом чуть выше неё лежит другой CMakeLists (проекта). В нем конечно же вписано add_subdirectory(src/3rdparty/mylib). Затем дальше нам надо собрать наш таргет и прилинковать к нему это библиотеку. Как сделать так, чтобы сначала собралась эта библиотека, а потом программа, и либа успешно обнаружилась? Я читал рассылки на английском но увы не понял.

./CMakeLists.txt:
ADD_SUBDIRECTORY(mylib mylib)
ADD_EXECUTABLE(megaprogram megaprogram.cpp)
TARGET_LINK_LIBRARY(megaprogram mylib)

./mylib/CMakeLists.txt
ADD_LIBRARY(mylib SHARED mylib.cpp)

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

Похоже вы не поняли. при сборке САМОГО проекта (не либы) либа какбы собирается сама тоже. Но мне надо чтобы она сначала собралась, а потом уже CMake искал где лежит СОБРАННАЯ либа. Прошу прощения за тупость, но я никак не могу понять как так сделать.

flareguner
() автор топика
Ответ на: комментарий от flareguner

В описаном случае сначала СМаке построит «дерево зависимостей», затем сбилдит либу mylib. Посля ее сборки он соберет megaprogram попутно слинковав его с либой... Я верно понял ?

Jetty ★★★★★
()
Ответ на: комментарий от flareguner

mylib - это «имя цели» насколько я правильно помню :)
Оно может быть определено как через add_dependencies так и через ADD_SUBDIRECTORY

Jetty ★★★★★
()
Ответ на: комментарий от flareguner

Правда непонятно что вы подразумеваете под «задетектит»...

Jetty ★★★★★
()
Ответ на: комментарий от Jetty

Всё оказалось столь банально. Очень благодарю вас за помощь.

flareguner
() автор топика
Ответ на: комментарий от Reset

>> ADD_SUBDIRECTORY(mylib mylib)

что это? почему два раза mylib ?


Первый параметр - имя source-директории, второй - build-директории (внутри дерева сборки). Если build-директорию не указывать, она будет такой же, как и source. В данном примере это да - бессмысленно, так как они совпадают.

По теме - внутри add_dependencies() зависимости указываются в виде целей. Не путать с названиями директорий, к которых эти цели лежат. Хотя часто для простоты их выбирают одинаковыми.

Dendy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.