LINUX.ORG.RU

Вопрос по cmake


0

0

Взял примерчик их официальный, там есть команда add_executable, 
создающая исполняемый файл. А как сделать статическую библиотеку? 
Попробовал add_library, но ей надо указывать исходники, а если они в 
подкаталогах, кот. добавляются, как я понял, теми же 'add_library'?

И еще:

src
  f1.cpp
  f1.h
  dir1
    f1.cpp
    f1.h
  dir2
    f1.cpp
    f1.h

Как я понял, в dir1 и в dir2 должны быть CMakeLists.txt, в которых
должны быть записи:

  add_library(dirN f1.cpp)
  

а в каталоге с src должен быть CMakeLists.txt, в котором
будут такие записи:

  subdirs(dir1 dir2)
  ...

  
А если структура каталогов сложная, и в каждом есть файлы, 
использующие заголовки в других директориях, тогда где я должен 
писать include_directories()? Надо ли перечислять в ней все директории
с указанием относительных путей, или есть менее утомительный способ ?

есть ли способ добавлять каталоги dir1 и dir2 в проект, не используя add_library? (естественно, с сохранением структуры каталогов)

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

нашел такой выход:

в корневом CMakeLists.txt написал

include_directories(${SRC_SOURCE_DIR})

aux_source_directory(dir1 DIR1_SRC) aux_source_directory(dir2 DIR2_SRC)

add_library(mylib ${DIR1_SRC} ${DIR2_SRC})

фтупую :) пока не знаю, начнутся ли проблемы, если в dir1 и dir2 будут файлы с одинаковыми именами. интересно, подставляет ли aux_source_directory к имени найденного файла его относительный (абсолютный?) путь?..

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

Выход нормальный. Только при добавлении новых файлов в директории надо перегенерировать makefiles. А статическая либа делается так: add_library( name STATIC sources) или SHARED для динамической.

А вообще, с CMake даже по их книженции за 50 баксов трудновато разобраться.

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

>Выход нормальный. Только при добавлении новых файлов в директории надо перегенерировать makefiles. А статическая либа делается так: add_library( name STATIC sources) или SHARED для динамической.

Спасибо.

Я, кстати, даже не ожидал: 1 CMakeLists.txt и все. По сравнению с тем, как это раньше делалось - очень здорово.

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