├── CMakeLists.txt
├── Calculator.cpp
├── Calculator.h
├── main.cpp
cmake_minimum_required(VERSION 3.0) project(BUILD) set(SOURCES test.cpp) add_executable(test1 ${SOURCES})
注:
#include mkdir build cd build cmake . make 注: ./test1 设置 cmake 的最新版本号,每个 CMakeLists.txt 文件首行必须包含 project( [VERSION ] [LANGUAGES ...]) project(projcetName VERSION 1.0) 其中,projectname 是项目的名称,version 是项目的版本号,language 是项目使用的编程语言。 在 CMake 中,project 命令通常是作为 CMakeLists.txt 文件的第一条命令出现,用于定义项目的名称和版本号。该命令会自动创建一些变量,例如 PROJECT_NAME 和 PROJECT_VERSION 把一个或多个文件编译成一个可执行的二进制文件 add_executable(name1 test.cpp) 执行文件: ./name1 set(SOURCES test1.cpp test2.cpp ....) add_executable(name1 ${SOURCES}) 执行: ./name1 示例中我们使用 file(GLOB ...) 命令从 src 目录中查找所有扩展名为 .cpp 的文件,并将它们存储在 SOURCES 变量中。然后,我们使用 add_executable 命令创建了一个名为 my_program 的可执行文件,并将 SOURCES 变量作为参数传递给该命令。这样,CMake 将会将这些文件编译成一个可执行文件。 file(GLOB SOURCES src/*.cpp) add_executable(my_program ${SOURCES}) 执行:./my_program project(my_project VERSION 1.0) message("Project name: ${PROJECT_NAME}") message("Project version: ${PROJECT_VERSION}") add_subdirectory(test1) 注:子目录中需要含有 CMakeLists.txt add_library( [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...]) add_library(mylib STATIC foo.cpp bar.cpp) target_sources 确定那些源文件会编译进目标 不使用 target_sources 定义一个名为 my_library 的库 add_library(my_library SHARED foo.cpp bar.cpp ) 使用 target_sources 定义一个名为 my_library 的库 add_library(my_library SHARED) 将 foo.cpp 和 bar.cpp 添加到 my_library 中 target_sources(my_library PRIVATE foo.cpp bar.cpp) 不使用 target_sources 定义一个名为 my_executable 的可执行文件 add_executable(my_executable main.cpp) 使用 target_sources 定义一个名为 my_executable 的可执行文件 add_executable(my_executable) 将 main.cpp 添加到 my_executable 中 target_sources(my_executable PRIVATE main.cpp) target_link_libraries 链接库文件(静态库或动态库) cmake_minimum_required(VERSION 3.0) project(VECTOR) #c++标准 set(CMAKE_CXX_STANDARD 11) #set(CMAKE_CXX_STANDARD_REQUIRED ON) 是一个CMake命令,它用于指定编译器是否应该强制使用所需的C++标准。将此命令设置为 #ON 将强制编译器使用所需的C++标准,如果编译器不支持所需的标准,则会引发错误。如果将其设置为 #OFF,则编译器会尝试使用所需的标准,但如果不支持,则会回退到较低的标准。 set(CMAKE_CXX_STANDARD_REQUIRED ON) # 自动找出当前目录下的源文件(不包含子目录),并赋值给SOURCES变量 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/lib SOURCES) # 生成共享库 add_library(vector_lib SHARED ${SOURCES}) #告知搜索的头文件路径 却是可以开放权限 target_include_directories(vector_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include) cmake_minimum_required(VERSION 3.0) project(MAIN) # 通知子目录Vector的CMakeLists.txt 编译 add_subdirectory(Vector) #生成二级制文件 main 源文件是main.cpp add_executable(main main.cpp) # 链接vector库文件 target_link_libraries(main PRIVATE vector_lib) #include set(MY_STRING "Hello, world!") set(MY_LIST "foo" "bar" "baz") set(MY_BOOL TRUE) 1. 在 CMakeLists.txt 中使用 (其也有作用域和访问权限,只可使用自身变量和自身所包含的子 CMakeLists.txt) set(MY_STRING "Hello, world!") message("${MY_STRING}") 2. 在代码中使用 #include 变量需要设置为缓存才可以跨区域访问 aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SUB_DIR_SRC) # 把 DIR_SRCS 追加到主目录定义的 ALL_SRCS 中 set(ALL_SRCS ${ALL_SRCS} ${SUB_DIR_SRC} CACHE INTERNAL "") 注: 1,在当前的CMakeLists.txt 目录下,找到所有的源文件(无法找到子目录下的源文件),并给变量SUB_DIR_SRC 2,设置变量 ALL_SRCS 为缓存、访问权限是INTERNAL 、初始值 "" 空字符串。 而后方可在主目录下的CMakeLists.txt 中访问到改变量,其他子目录也可访问到。 在编译大型项目时,并不建议使用file命令、aux_source_directory命令。手动导入源文件列表编译效率更高。 CMake Reference Documentation — CMake 3.26.3 Documentation编译命令
外部编译:
执行
常见命令
cmake_minimum_required
project 设置项目名称
add_executable
例 1 直接使用文件
例 2 使用变量
例 3
message 打印信息
add_subdirectory 添加子目录编译
add_library 编译成库文件
例1
例2
例子
子目录CMakeListx.txt
主目录CMakeLists.txt
main.cpp
set
1. 设置一个字符串变量
2. 设置一个字符串列表
3. 设置一个布尔值
读取变量、使用变量
常用常量
注意事项
在 CMakeLists.txt 中共享变量
大型项目
官网: