目錄
CMake語法—內置變量
1 CMake變量分類
1.1 普通變量
詳情可參見隨筆《普通變量與函數》、《普通變量與子目錄》、《普通變量與包含、宏》
1.2 緩存變量
詳情可參見隨筆《緩存變量》
1.3 環境變量
詳情可參見隨筆《環境變量》
1.4 內置變量
2 CMake內置變量分類
2.1 提供信息的變量
詳情可參見官方文檔《Variables that Provide Information》
2.2 改變行為的變量
詳情可參見官方文檔《Variables that Change Behavior》
2.3 描述系統的變量
詳情可參見官方文檔《Variables that Describe the System》
2.4 控制構建的變量
詳情可參見官方文檔《Variables that Control the Build》
2.5 語言變量
詳情可參見官方文檔《Variables for Languages》
2.6 CTest變量
詳情可參見官方文檔《Variables for CTest》
2.7 CPack變量
詳情可參見官方文檔《Variables for CPack》
2.8 內部變量(不推薦再使用)
CMake還有很多內部變量,他們中的大多數都無正式文檔記錄。
然而,其中一些變量在某些時候被描述為普通變量,因此可能會在遺留代碼中遇到。
它們意思可能已經發生變化,不建議在項目代碼中使用。
詳情可參見官方文檔《Internal Variables》
3 示例代碼
3.1 代碼結構
-
learn_cmake:為根目錄
-
build:為CMake配置輸出目錄(在此例中即生成sln解決方案的地方)
-
cmake_config.bat:執行CMake配置過程的腳本(雙擊直接運行)
@echo off set currentDir=%~dp0 set buildDir=%currentDir% set cmakeOutputDir=%currentDir%\build cmake -S %buildDir% -B %cmakeOutputDir% -G"Visual Studio 16 2019" -T v140 -A x64 pause
-
CMakeLists.txt:CMake主腳本
3.2 代碼
下面打印部分內置變量的值,示例CMakeLists.txt代碼:
cmake_minimum_required(VERSION 3.18)
# 設置工程名稱
set(PROJECT_NAME KAIZEN)
# 設置工程版本號
set(PROJECT_VERSION "1.0.0.10" CACHE STRING "默認版本號")
# 工程定義
project (${PROJECT_NAME}
LANGUAGES CXX C
VERSION ${PROJECT_VERSION}
)
# 打印開始日志
message(STATUS "########## BEGIN_TEST_INTERNAL_VAR")
## 1 Variables that Provide Information
message(STATUS "1 CMAKE_CACHE_MAJOR_VERSION: ${CMAKE_CACHE_MAJOR_VERSION}")
message(STATUS "1 CMAKE_CACHE_MINOR_VERSION: ${CMAKE_CACHE_MINOR_VERSION}")
message(STATUS "1 CMAKE_CACHE_PATCH_VERSION: ${CMAKE_CACHE_PATCH_VERSION}")
message(STATUS "1 CMAKE_CURRENT_LIST_DIR: ${CMAKE_CURRENT_LIST_DIR}")
message(STATUS "1 CMAKE_VS_PLATFORM_TOOLSET: ${CMAKE_VS_PLATFORM_TOOLSET}")
message(STATUS "1 CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}\n")
## 2 Variables that Change Behavior
message(STATUS "2 CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")
message(STATUS "2 CMAKE_FIND_ROOT_PATH: ${CMAKE_FIND_ROOT_PATH}")
message(STATUS "2 CMAKE_INCLUDE_PATH: ${CMAKE_INCLUDE_PATH}")
message(STATUS "2 CMAKE_SYSTEM_INCLUDE_PATH: ${CMAKE_SYSTEM_INCLUDE_PATH}\n")
## 3 Variables that Describe the System
message(STATUS "3 MSVC: ${MSVC}")
message(STATUS "3 CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}")
message(STATUS "3 MSVC_VERSION: ${MSVC_VERSION}")
message(STATUS "3 MSVC_TOOLSET_VERSION: ${MSVC_TOOLSET_VERSION}\n")
## 4 Variables that Control the Build
message(STATUS "4 CMAKE_AUTOMOC: ${CMAKE_AUTOMOC}")
message(STATUS "4 CMAKE_DEFAULT_BUILD_TYPE: ${CMAKE_DEFAULT_BUILD_TYPE}")
message(STATUS "4 CMAKE_LIBRARY_OUTPUT_DIRECTORY: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}")
message(STATUS "4 CMAKE_INCLUDE_CURRENT_DIR: ${CMAKE_INCLUDE_CURRENT_DIR}")
message(STATUS "4 CMAKE_MSVCIDE_RUN_PATH: ${CMAKE_MSVCIDE_RUN_PATH}\n")
## 5 Variables for Languages
message(STATUS "5 CMAKE_C_STANDARD: ${CMAKE_C_STANDARD}")
message(STATUS "5 CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}")
message(STATUS "5 CMAKE_COMPILER_IS_GNUCC: ${CMAKE_COMPILER_IS_GNUCC}")
# 打印結束日志
message(STATUS "########## END_TEST_INTERNAL_VAR\n")
3.3 運行結果
運行結果如下:
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.17763.
-- The CXX compiler identification is MSVC 19.0.24245.0
-- The C compiler identification is MSVC 19.0.24245.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/amd64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- ########## BEGIN_TEST_INTERNAL_VAR
-- 1 CMAKE_CACHE_MAJOR_VERSION:
-- 1 CMAKE_CACHE_MINOR_VERSION:
-- 1 CMAKE_CACHE_PATCH_VERSION:
-- 1 CMAKE_CURRENT_LIST_DIR: F:/learn_cmake
-- 1 CMAKE_VS_PLATFORM_TOOLSET: v140
-- 1 CMAKE_CURRENT_SOURCE_DIR: F:/learn_cmake
-- 2 CMAKE_BUILD_TYPE:
-- 2 CMAKE_FIND_ROOT_PATH:
-- 2 CMAKE_INCLUDE_PATH:
-- 2 CMAKE_SYSTEM_INCLUDE_PATH:
-- 3 MSVC: 1
-- 3 CMAKE_SYSTEM_NAME: Windows
-- 3 MSVC_VERSION: 1900
-- 3 MSVC_TOOLSET_VERSION: 140
-- 4 CMAKE_AUTOMOC:
-- 4 CMAKE_DEFAULT_BUILD_TYPE:
-- 4 CMAKE_LIBRARY_OUTPUT_DIRECTORY:
-- 4 CMAKE_INCLUDE_CURRENT_DIR:
-- 4 CMAKE_MSVCIDE_RUN_PATH:
-- 5 CMAKE_C_STANDARD:
-- 5 CMAKE_CXX_STANDARD:
-- 5 CMAKE_COMPILER_IS_GNUCC:
-- ########## END_TEST_INTERNAL_VAR
-- Configuring done
-- Generating done
-- Build files have been written to: F:/learn_cmake/build
請按任意鍵繼續. . .