CMake
中项目和目标,与 Visual Studio
中是不一样的,CMake
项目 相当于 Visual Studio
解决方案,而 CMake
目标 相当于 Visual Studio
一个一个的不同类型的项目。
我们非常关心解决方案的属性和项目的属性,包括 名称、版本、语言、路径、描述和网站。
CMake 中可以使用多次 project
命令,在这种情况会是什么样的情况?
如果在同一个 CMakeLists.txt
存在 project
命令,以最后一个 project
命令为主,会覆盖前面的命令。
如果用 add_subdirectory
命令,在子目录的 CMakeLists.txt
文件中,也有 project
命令,那么构建后,都会生成项目。
最好一个项目只只创建一个解决方案,除非一次性创建多个解决方案。
注意:如果创建多个解决方案,那么需要多个
CMakeLists.txt
文件,需要在多个子目录中创建CMakeLists.txt
文件。每个CMakeLists.txt
文件中的目标,只会添加到当前的解决方案中。
1. CMake 工具:路径和版本
CMake 路径
CMAKE_SOURCE_DIR
为 顶级 CMakeLists.txt
文件所在路径,CMAKE_BINARY_DIR
为 构建输出所在路径,这两个变量与子目录中的 CMakeLists.txt
文件无关。
cmake_minimum_required(VERSION 3.0.0)
message("CMAKE_BINARY_DIR ${CMAKE_BINARY_DIR}")
message("CMAKE_SOURCE_DIR ${CMAKE_SOURCE_DIR}")
CMake 版本
CMAKE_VERSION
为 CMake 的版本,由 MAJOR.MINOR.PATCH.TWEAK
组成。CMAKE_MAJOR_VERSION
为 主要版本, CMAKE_MINOR_VERSION
为 次要版本, CMAKE_PATCH_VERSION
为 补丁版本, CMAKE_TWEAK_VERSION
为微调版本。
cmake_minimum_required(VERSION 3.0.0)
message("CMAKE_VERSION ${CMAKE_VERSION}")
message("CMAKE_MAJOR_VERSION ${CMAKE_MAJOR_VERSION}")
message("CMAKE_MINOR_VERSION ${CMAKE_MINOR_VERSION}")
message("CMAKE_PATCH_VERSION ${CMAKE_PATCH_VERSION}")
message("CMAKE_TWEAK_VERSION ${CMAKE_TWEAK_VERSION}")
当前执行 CMakeLists.txt
文件
CMAKE_*
与 CMAKE_CURRENT_*
区别在于,CMAKE_*
表示顶级 CMakeLists.txt
文件,CMAKE_CRRUENT_*
表示当前 CMakeLists.txt
文件。
CMAKE_CURRENT_SOURCE_DIR
为当前 CMakeLists.txt
文