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 執行之間出現不同的行為。