CMAKE — целевой файл makefile для библиотеки

#cmake

#cmake

Вопрос:

В настоящее время я меняю систему сборки в своем проекте с gnu makefiles на cmake (которые генерируют makefiles).

Мой проект генерирует несколько библиотек (.lib) и несколько исполняемых файлов (.exe).

В настоящее время я генерирую make-файлы, используя следующую команду :

 cmake -G "Unix Makefiles" .. -DCMAKE_BUILD_TYPE=Debug
  

Сгенерированные makefile содержат all цель, а также цель для каждого исполняемого файла (скомпилированного как таковой с add_executable помощью директивы cmake), поэтому я могу скомпилировать подмножество проекта (что экономит много времени): make executable_1; make executable_2 и так далее.

Однако для библиотек нет цели (скомпилированной как таковой с add_library помощью директивы cmake), поэтому я не могу сделать make library_1 , например. Я хочу сделать это, потому что это сэкономит много времени.

Я попытался добавить фиктивный исполняемый файл в cmake библиотеки и связать библиотеку с этим исполняемым файлом (который содержит только main без фактического использования кода library_1).

 add_library(library_1 test.cpp)
add_executable(dummy_exe dummy_main.cpp)
target_link_library(dummy_exe library_1)
  

Он добавляет цель для dummy_exe, но не создает библиотеку, потому что на самом деле ему не нужно связывать какой-либо код library_1.

В любом случае это была попытка обходного пути, и я бы предпочел просто позвонить make library_1 в конце концов. Есть ли какой-либо способ добавить целевой файл makefile для библиотеки с помощью cmake?

Комментарии:

1. Использование add_library должно создать цель в Makefile, может быть, вы ее упустили? Если вы уверены, что он не создан, пожалуйста, создайте минимальный пример и подробно укажите свою среду (версию CMake, ОС).

2. make help перечислит все известные цели, а для меня перечислит цели библиотеки.

Ответ №1:

Как ответили w-m и Fred, CMAKE действительно создает цель для библиотек в Makefile.

Я пытался создать библиотеку с именем подпроекта cmake библиотеки вместо имени библиотеки.

make help действительно, очень помогло найти эту проблему, поскольку в ней перечислено все, что можно создать.