cmake
Bygg mål
Sök…
Syntax
- add_executable (target_name [EXCLUDE_FROM_ALL] source1 [source2 ...])
- add_library (lib_name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
körbara
För att skapa ett build-mål som producerar en körbar bör man använda kommandot add_executable
:
add_executable(my_exe
main.cpp
utilities.cpp)
Detta skapar ett build-mål, t.ex. make my_exe
för GNU- make my_exe
, med lämpliga invokationer av den konfigurerade kompilatorn för att producera en körbar my_exe
från de två källfilerna main.cpp
och utilities.cpp
.
Som standard läggs alla körbara mål till det inbyggda all
målet ( all
för GNU- BUILD_ALL
, BUILD_ALL
för MSVC).
För att utesluta en körbar från att byggas med standardmålet all
, kan man lägga till den valfria parametern EXCLUDE_FROM_ALL
direkt efter EXCLUDE_FROM_ALL
:
add_executable(my_optional_exe EXCLUDE_FROM_ALL main.cpp)
bibliotek
För att skapa ett build-mål som skapar ett bibliotek använder add_library
kommandot add_library
:
add_library(my_lib lib.cpp)
CMake-variabeln BUILD_SHARED_LIBS
styr när som BUILD_SHARED_LIBS
att bygga ett statiskt ( OFF
) eller ett delat ( ON
) -bibliotek, med till exempel cmake .. -DBUILD_SHARED_LIBS=ON
. Du kan dock uttryckligen ställa in att bygga ett delat eller ett statiskt bibliotek genom att lägga till STATIC
eller SHARED
efter 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
Den faktiska utdatafilen skiljer sig mellan systemen. Till exempel kallas ett delat bibliotek på Unix-system vanligtvis libmy_shared_library.so
, men på Windows skulle det vara my_shared_library.dll
och my_shared_library.lib
.
Liksom add_executable
, lägg till EXCLUDE_FROM_ALL
före listan med källfiler för att utesluta den från all
mål:
add_library(my_lib EXCLUDE_FROM_ALL lib.cpp)
Bibliotek som är utformade för att laddas vid körning (till exempel plugins eller applikationer som använder något som dlopen
) bör använda MODULE
istället för SHARED
/ STATIC
:
add_library(my_module_lib MODULE lib.cpp)
Till exempel på Windows finns det ingen importfil ( .lib
), eftersom symbolerna exporteras direkt i .dll
.