BUILD_SHARED_LIBS¶
告知 add_library()
在未明確指定函式庫類型時,預設使用 SHARED
函式庫,而非 STATIC
函式庫。
當呼叫 add_library()
且未明確指定函式庫類型時,會檢查目前的 BUILD_SHARED_LIBS
變數值。如果為真,則預設函式庫類型為 SHARED
。否則,預設為 STATIC
。
例如,以下程式碼
add_library(example ${sources})
其行為如同以下程式碼
if(BUILD_SHARED_LIBS)
add_library(example SHARED ${sources})
else()
add_library(example STATIC ${sources})
endif()
CMake 預設不定義 BUILD_SHARED_LIBS
,但專案通常會使用 option()
命令為其建立快取條目。
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
這提供了一個使用者可以控制的開關,例如,使用 cmake -D
。如果要在專案中加入此選項,請在頂層的 CMakeLists.txt
檔案中,於任何 add_library()
呼叫之前進行。請注意,如果將外部依賴項直接帶入建置中,例如使用 FetchContent
或直接呼叫 add_subdirectory()
,且其中一個依賴項具有 option(BUILD_SHARED_LIBS ...)
的呼叫,則頂層專案也必須在帶入其依賴項之前呼叫 option(BUILD_SHARED_LIBS ...)
。如果沒有這樣做,可能會導致在第一次和後續 CMake 執行之間出現不同的行為。