cmake
Построение целей
Поиск…
Синтаксис
- add_executable (target_name [EXCLUDE_FROM_ALL] source1 [источник2 ...])
- add_library (lib_name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [источник2 ...])
исполняемые
Чтобы создать цель сборки, производящую исполняемый файл, следует использовать команду add_executable :
add_executable(my_exe
main.cpp
utilities.cpp)
Это создает цель сборки, например make my_exe для GNU make, с соответствующими my_exe сконфигурированного компилятора для создания исполняемого файла my_exe из двух исходных файлов main.cpp и utilities.cpp .
По умолчанию, все исполняемые цели добавляются к встроено all целям ( all для GNU сделать, BUILD_ALL для MSVC).
Чтобы исключить возможность создания исполняемого файла с помощью all цели по умолчанию, можно добавить необязательный параметр EXCLUDE_FROM_ALL сразу после целевого имени:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
Библиотеки
Чтобы создать цель сборки, которая создает библиотеку, используйте команду add_library :
add_library(my_lib lib.cpp)
Переменная CMake BUILD_SHARED_LIBS управляет всякий раз, когда создается статическая ( OFF ) или общая ( ON ) библиотека, используя, например, cmake .. -DBUILD_SHARED_LIBS=ON . Однако вы можете явно настроить создание общей или статической библиотеки, добавив STATIC или SHARED после целевого имени:
add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library
Фактический выходной файл отличается между системами. Например, разделяемая библиотека в системах Unix обычно называется libmy_shared_library.so , но в Windows это будет my_shared_library.dll и my_shared_library.lib .
Как add_executable , добавить EXCLUDE_FROM_ALL перед списком исходных файлов , чтобы исключить его из all цели:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Библиотеки, предназначенные для загрузки во время выполнения (например, плагины или приложения, использующие что-то вроде dlopen ), должны использовать MODULE вместо SHARED / STATIC :
add_library(my_module_lib MODULE lib.cpp)
Например, в Windows не будет файла импорта ( .lib ), потому что символы экспортируются непосредственно в .dll .