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 .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow