CMake学习1 一个最简单的CMake项目

您所在的位置:网站首页 创建cmake工程 CMake学习1 一个最简单的CMake项目

CMake学习1 一个最简单的CMake项目

2023-03-16 11:31| 来源: 网络整理| 查看: 265

CMake是目前最常用的跨平台构建系统之一, 本教程是我在学习和工作过程中的笔记整理, 涵盖了 CMake 构建系统的常见问题。

1. 一个最简单的CMake项目

2. 添加库

3. 安装和测试

CMake的安装:

windows: 下载安装包, 将cmake配置到环境变量Download | CMake

macos: 在终端中执行brew install cmake (需要先安装brew)

linux: 使用安装包管理软件安装, ubuntu: sudo apt-get install cmake

CMake的项目文件是CMakeLists.txt

如何来开始一个CMake项目呢? 

首先要了解CMake最基本的语法、命令和变量, 然后使用这些构建一个最简单的CMake项目(仅有一个源代码文件的可执行文件).

1. 编写CMakeLists.txt

在一个最简单的项目,CMakeLists.txt只需要包含三个命令:

cmake_minimum_required(VERSION 3.10) project(HelloWorld) add_executable(HelloWorld helloworld.cpp)

注意cmake支持大写、小写和混合大小写命令,但首选小写命令

cmake_minimum_required: 设置CMake最低支持的版本, 确保CMake函数的兼容运行, 必须在项目最顶层目录下的CMakeLists.txt中的最前面声明.

project: 设置项目名, 在cmake_minimum_required()命令之后调用, project命令中还可以设置其他项目级别的信息, 比如编程语言, 版本号, 支持的语言有: c, cxx, csharp, objc, objcxx, swift等.

add_executable: 设置需要编译的源代码文件,并创建可执行文件.

2. 构建和运行

CMake的编译一般是在源代码目录之外的, 在项目目录下新建目录build来存放编译文件. 执行cmake命令会生成本地构建系统, 在linux和mac上是Makefile文件, 在windows上是visual studio项目文件.

cd build # 运行cmake配置项目并生成本地构建系统 cmake ../ # 编译项目, 得到可执行程序 cmake --build .

源码内编译是指编译生成的文件和源代码文件在相同的目录, 对于大型项目来说会给源代码管理带来不便, 也不方便快速删掉输出文件来得到一个干净的项目.

源码外编译是指编译生成的文件和源代码文件不在相同的目录, 编译文件和源代码文件相分离, 可以方便的做源代码管理, 也可以很方便的在不同目录中针对不同的选项进行编译.

2.1 windows构建

cmake生成项目的过程中, 会检测系统的c和c++编译器, 下面是windows的cmake输出:

-- Building for: Visual Studio 17 2022 -- Selecting Windows SDK version 10.0.22000.0 to target Windows 10.0.19044. -- The C compiler identification is MSVC 19.31.31105.0 -- The CXX compiler identification is MSVC 19.31.31105.0 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.31.31103/bin/Hostx64/x64/cl.exe - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.31.31103/bin/Hostx64/x64/cl.exe - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: D:/proj/cmake/basic/build

使用Visual Studio 2022生成项目, 在对应目录下检测编译器cl.exe, 生成windows的build目录:

如果电脑中安装了多个版本的visual studio, 可以使用命令参数-G来指定visual studio版本

Visual Studio 17 2022 — CMake 3.26.0-rc6 Documentation

cmake ../ -G "Visual Studio 17 2022" -A Win32 cmake ../ -G "Visual Studio 17 2022" -A x64 cmake ../ -G "Visual Studio 17 2022" -A ARM cmake ../ -G "Visual Studio 17 2022" -A ARM64 cmake ../ -G "Visual Studio 16 2019" -A Win32 cmake ../ -G "Visual Studio 16 2019" -A x64 cmake ../ -G "Visual Studio 16 2019" -A ARM cmake ../ -G "Visual Studio 16 2019" -A ARM64 cmake ../ -G "Visual Studio 15 2017" -A Win32 cmake ../ -G "Visual Studio 15 2017" -A x64 cmake ../ -G "Visual Studio 15 2017" -A ARM cmake ../ -G "Visual Studio 15 2017" -A ARM64 2.2 mac构建

mac和linux默认的构建系统是Makefile, 在mac上执行cmake的输出如下:

-- The C compiler identification is AppleClang 14.0.0.14000029 -- The CXX compiler identification is AppleClang 14.0.0.14000029 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Configuring done -- Generating done -- Build files have been written to: /Users/xxx/proj/cmake/basic/build

mac上安装xcode之后, 会到Xcode的目录下检测c和c++编译器, mac的build目录:

在mac上还可以生成xcode项目, 执行命令: cmake ../ -GXcode

Xcode — CMake 3.26.0-rc6 Documentation

 如果在生成xcode项目的过程可能会提示找不到c和c++编译器, 报错“ No CMAKE_C_COMPILER could be found.” 解决方案是:

1. 可能是xcode-select没有选择正确的路径

# 原因是先安装xcode再安装命令行工具时, xcode-select -p 输出的目录是/Library/Developer/CommandLineTools # 重置xcode-select的路径为/Applications/Xcode.app/Contents/Developer sudo xcode-select --reset # 或者执行命令 sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

macos - xcode-select active developer directory error - Stack Overflow

# 输出当前的xcode路径 xcode-select -print-path # 切换xcode路径 sudo xcode-select -switch /Library/Developer/CommandLineTools # 重置xcode路径 sudo xcode-select --reset

2. 在xcode14中, 如果cmake版本低于3.23.3,  cmake ../ 生成Makefile项目正常, 但是cmake ../ -GXcode生成xcode项目仍旧报错"No CMAKE_C_COMPILER could be found", CMake的log输出有如下报错: 

error: An empty identity is not valid when signing a binary for the product type 'Command-line Tool'. (in target 'CompilerIdCXX' from project 'CompilerIdCXX')

可以通过指定c和c++编译器来解决

cmake ../ -GXcode -DCMAKE_C_COMPILER="$(xcrun -find cc)" -DCMAKE_CXX_COMPILER="$(xcrun -find c++)"

执行命令之后生成的xcode工程目录如下: 

 也可以通过升级CMake版本解决:

brew update brew upgrade cmake

Xcode 14 beta: CMake not able to resolve CMAKE_C_COMPILER and CMAKE_CXX_COMPILER - Stack Overflow

Xcode: Use ad-hoc signing during compiler id on macOS (!7350) · Merge requests · CMake / CMake · GitLab

 "Xcode 14 no longer accepts an empty signing identity for macOS. However, Xcode in general does not accept an ad-hoc signing identity for iOS. Switch based on the target platform.

Suppress an incidental warning in the "Run Script" build phase. Teach the RunCMake infrastructure to ignore some new warnings from xcodebuild."



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3