#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
действительно, очень помогло найти эту проблему, поскольку в ней перечислено все, что можно создать.