BUILD_SHARED_LIBS¶
告知 add_library()
在沒有明確指定函式庫類型的情況下,預設使用 SHARED
函式庫,而不是 STATIC
函式庫。
當呼叫 add_library()
而沒有明確指定函式庫類型時,會檢查目前的 BUILD_SHARED_LIBS
變數值。如果為 true,則預設函式庫類型為 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 執行之間出現不同的行為。