Skip to content

[project]

单例配置表,描述项目本身。生成后的 CMake 配置(版本、utf-8)见 cmake

toml
[project]
name = "myproject"
version = "1.0.0"
description = "Description of the project"
languages = ["C", "CXX"]
msvc-runtime = "" # dynamic (implicit default), static
cmake-before = """
message(STATUS "CMake injected before the project() call")
"""
cmake-after = """
message(STATUS "CMake injected after the project() call")
"""
include-before = ["cmake/before-project.cmake"]
include-after = ["cmake/after-project.cmake"]
字段类型说明
namestring项目名,对应 project()
versionstring版本号
descriptionstring描述
languagesarray启用的语言,见下表
msvc-runtimestringdynamic(默认)或 static,见 target
cmake-beforestring(多行)project() 注入原生 CMake
cmake-afterstring(多行)project() 注入原生 CMake
include-beforearrayproject()include() 的 .cmake 文件
include-afterarrayproject()include() 的 .cmake 文件

languages

支持语言(对应 enable_language):

CCXX(C++)、CSharpCUDAOBJCOBJCXXFortranHIPISPCSwiftASMASM_MASMASM_NASMASM_MARMASMASM-ATTJava(未文档化)、RC(未文档化)

启用语言后,给 target 加对应扩展名源文件会自动使用对应编译器/汇编器。

别禁用 C

除非确定不用,否则不要禁用 C 语言。有时 fetch-content 加进来的项目隐式依赖它,报错信息会非常难懂。

cmake-before / cmake-after

最重要的逃生舱:任何原生 CMake 都能塞进多行字符串。常用于全局配置:

toml
[project]
cmake-after = """
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
"""

实例

toml
[project]
name = "myapp"
version = "2.1.0"
description = "Cross-platform demo"
languages = ["C", "CXX"]
cmake-after = """
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
"""

生成物要点:project(myapp VERSION 2.1.0 ...)、project() 后注入的 set(...)。CMake 版本与 utf-8 配置放 [cmake] 表(见 cmake)。

[project] 是单例表

[project][cmake] 只能写一个。重复声明同名表是 TOML 语法错误,所有项目级键放同一张表。

下一步