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 .