cmake
Buduj cele
Szukaj…
Składnia
- add_executable (nazwa_docelowa [EXCLUDE_FROM_ALL] source1 [source2 ...])
- add_library (lib_name [STATIC | UDOSTĘPNIONY | MODUŁ] [EXCLUDE_FROM_ALL] source1 [source2 ...])
Pliki wykonywalne
Aby utworzyć cel kompilacji wytwarzający plik wykonywalny, należy użyć polecenia add_executable
:
add_executable(my_exe
main.cpp
utilities.cpp)
Tworzy to cel kompilacji, np. make my_exe
dla GNU make, z odpowiednimi wywołaniami skonfigurowanego kompilatora, aby wygenerować wykonywalny my_exe
z dwóch plików źródłowych main.cpp
i utilities.cpp
.
Domyślnie wszystkie cele wykonywalne są dodawane do wbudowanego all
tarczy ( all
dla GNU make, BUILD_ALL
dla MSVC).
Aby wykluczyć tworzenie pliku wykonywalnego z domyślnym celem all
, można dodać opcjonalny parametr EXCLUDE_FROM_ALL
zaraz po nazwie celu:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
Biblioteki
Aby utworzyć cel kompilacji, który tworzy bibliotekę, użyj polecenia add_library
:
add_library(my_lib lib.cpp)
Zmienna CMake BUILD_SHARED_LIBS
kontroluje, kiedy ma zostać zbudowana biblioteka statyczna ( OFF
) Lub współużytkowana ( ON
), Używając na przykład cmake .. -DBUILD_SHARED_LIBS=ON
. Można jednak jawnie ustawić budowanie biblioteki współużytkowanej lub statycznej, dodając STATIC
lub SHARED
po nazwie docelowej:
add_library(my_shared_lib SHARED lib.cpp) # Builds an shared library
add_library(my_static_lib STATIC lib.cpp) # Builds an static library
Rzeczywisty plik wyjściowy różni się w zależności od systemu. Na przykład biblioteka współdzielona w systemach Unix nazywa się zwykle libmy_shared_library.so
, ale w systemie Windows byłoby to my_shared_library.dll
i my_shared_library.lib
.
Podobnie jak add_executable
, dodaj EXCLUDE_FROM_ALL
przed listą plików źródłowych, aby wykluczyć go z all
docelowych:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Biblioteki, które są zaprojektowane do ładowania w czasie wykonywania (na przykład wtyczki lub aplikacje korzystające z czegoś takiego jak dlopen
), powinny używać MODULE
zamiast SHARED
/ STATIC
:
add_library(my_module_lib MODULE lib.cpp)
Na przykład w systemie Windows nie będzie pliku importu ( .lib
), ponieważ symbole są eksportowane bezpośrednio do pliku .dll
.