📘 NOTE |
---|
case insensitive |
📘 NOTE |
---|
CMake 所產生出來的 Makefile 無法獨立運作,建置過程仍然必須依賴 CMake,因此無法直接將 makefile 搬移到沒有 CMake 的環境中使用。事實上,只要更換環境就應該重新執行 CMake,針對目前環境配置產生 Makefile。 |
配置 CMake。
配置完後,你可以在 CMakeCache.txt 可找到一些配置的相關資訊。
一般而言,編譯器、Makefile 產生器會自動選擇全域可見的那些。
在 VScode 按 F7 自動構建。
-S
:指定原始碼目錄(通常是專案的跟目錄)-B
:指定建置目錄(產生 Makefile 與執行檔的目錄)-G
:指定 Makefile 產生器
"Ninja"
:ninja"Unix Makefiles"
:make"NMake Makefiles"
:nmake"MinGW Makefiles"
:mingw32-make"Visual Studio 17 2022"
:MSVC-D
:設定變數set
指定。
CMAKE_C_COMPILER=gcc
:C 編譯器(gcc)CMAKE_CXX_COMPILER=g++
:C++ 編譯器(g++)CMAKE_BUILD_TYPE=Release
:建構型態(Release, Debug…)CMAKE_TOOLCHAIN_FILE=.../vcpkg.cmake
:套件管理器(vcpkg…)-P
:將 CMake 檔案當成腳本執行
可單純作為試驗邏輯使用
執行檔應位於 build 目錄頂層
🚨 CAUTION |
---|
這裡要指定一下 Makefiles 產生器,要不然編譯器都不知道為啥會自動選擇 VS 的 |
專案目錄結構
CMakeLists.txt
lib/CMakeLists.txt
lib/my_dll.h
lib/my_dll.cpp
run_dll.cpp
set
:變數
✅:foo 變數為 string list
messages
:標準輸出
math
:數學計算
if
/ elseif
/ else
/ endif
:條件邏輯
foreach
/ endforeach
:迴圈
macro
/ endmacro
/ function / endfunction
:函式、巨集
✅:function 會建立 local 變數,而 macro 則會影響 global 變數
add_subdirectory
:將指定目錄的 CMake 專案(內含 CMakeLists.txt)一起加入建置
add_executable
:新增一個 CMake 目標,其為執行檔
add_library
:新增一個 CMake 目標,其為鏈結函式庫
靜態鏈結函式庫
動態鏈結函式庫
add_definitions
:構建時,加入 preprocessor 定義
target_sources
:構建 CMake 目標時,需要哪些源代碼(無須標頭檔)
include_directories
/ target_include_directories
:添加標頭檔目錄
target 是針對特定 CMake 目標,現代較推薦後者。
link_libraries
/ target_link_libraries
:添加鏈結函式庫目錄
target 是針對特定 CMake 目標,現代較推薦後者。
通常來自 find_package
或 add_subdirectory
。
set_target_properties
:屬性控制編譯選項(若無給定,則採用全域預設值)
include
:執行另一個 CMake 腳本
find_package
…