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
.