第一个案例
在linux下写一个c++程序,打印出一段字符串,编译运行。
首先创建两个文件:
touch test.cpp
touch CMakeLists.txt
test.cpp:
#include<iostream>
using namespace std;
int main()
{
cout<<"Hello CMake!"<<endl;
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.6)
project(Test)
add_executable(Test test.cpp)
上面c++的程序就不说了,看看CMakeLists.txt。
命令 | 功能 |
---|---|
cmake_minimum_required | 指定使用cmake的最低版本 |
project(项目名) | 生成的项目名 |
add_executable(可执行程序名,源文件名) | 生产可执行程序 |
第一个命令可以省略,但是新的版本更新的命令可能在旧的版本中不能使用,建议写上。
第二个命令project也就是写一个构建出来的项目名字。除了指定名字外,这个命令还可以接一些参数,来说明构建的项目版本,描述,url等。
第三个命令主要是第二个参数,如果项目有多个源文件,就依次将源文件放在后面就行了。
创建的文件写完后,在linux下依次执行以下命令:
cmake .
make
ls
然后会看到生成的多个文件:
CMakeCache.txt CMakeFiles cmake_install.cmake CMakeLists.txt Makefile poj.cpp t1.h Test
我们需要关心的就只有那个绿色的可执行文件。那么生成的多余的文件,我们可以给他们创建一个目录放进去,以免打扰我们的视线。
set的使用
定义变量
set(var [value])
set就是设置一个变量代替一个字符串,用c++来类比的话就是
set(src hello cmake)
可以等价于
string src = "hello cmake"
要取变量src
的值需要使用${src}
。就是把变量名写在$
大括号里。
设定编译器标准
set还可以设置c++标准,如c98 c++11 C++14 c++17 c++20等。
set(CMAKE_CXX_STANDARD 11)
CMAKE_CXX_STANDARD
是一个宏,可以记一下。
除了在CMakeLists里面设置编译标准,还可以在执行cmake的时候指定这个宏的值。
cmake CMakeLists.txt文件路径 -DCMAKE_CXX_STANDARD=11
然后就会生产一个makefile。指定的标准就会写入makefile文件中。那么我们通过makefile里面的规则去构建项目的时候编译器就会根据这个标准去对程序进行编译。
指定输出的路径
set的第三个用法语法是不变的。
set(HOME /home/robin/sort/)
set(EXECUTABLE_OUTPUT_PATH ${HOME}/bin)
第一个set设置了一个变量,第二个set设置了可执行文件的输出路径,如果这个路径的子目录不存在会自动生成。建议使用绝对路径。