Cmake介绍
Cmake是一个跨平台的的编译器,能够输出makefile和project文件
step 1
一个简单的项目的配置是CMakeList.txt是有三行组成:
cmake_minimum_required(VERSION 3.10)
# set the project name
project(Tutorial)
# add the executable
add_executable(Tutorial tutorial.cxx)
cmake_minimum_required:设置版本号
project:设置项目名称和版本号,
project(Tutorial VERSION 1.0)
configure_file(TutorialConfig.h.in TutorialConfig.h):
configure_file(<input> <output> [COPYONLY] [ESCAPE_QUOTES] [@ONLY] [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
configure_file
主要实现如下两个功能:
-
将
<input>
文件
里面的内容全部复制到
<output>
文件中; -
根据参数规则,替换
@VAR@
或
${VAR}
变量;
-
COPYONLY
-
仅拷贝
<input>
文件
里面的内容到
<output>
文件,
不进行变量的替换
;
-
仅拷贝
-
ESCAPE_QUOTES
- 使用反斜杠(C语言风格)来进行转义;
-
@ONLY
-
限制替换, 仅仅替换
@VAR@
变量, 不替换
${VAR}
变量
-
限制替换, 仅仅替换
-
NEWLINE_STYLE
-
指定输入文件的新行格式, 例如:Unix 中使用的是
\n
, windows 中使用的
\r\n
-
指定输入文件的新行格式, 例如:Unix 中使用的是
**注意: **
COPYONLY
和
NEWLINE_STYLE
是冲突的,不能同时使用;
Config.h.in
文件内容
/**
* This is the configure demo
* - CMAKEDEFINE_VAR1 = @CMAKEDEFINE_VAR1@
* - CMAKEDEFINE_VAR2 = @CMAKEDEFINE_VAR2@
* - DEFINE_VAR1 = @DEFINE_VAR1@
* - DEFINE_VAR2 = @DEFINE_VAR2@
*/
/**
* cmakedefine 会根据变量的值是否为真(类似 if)来变换为 #define VAR ... 或 #undef VAR
*/
#cmakedefine CMAKEDEFINE_VAR1 @CMAKEDEFINE_VAR1@
#cmakedefine CMAKEDEFINE_VAR2 @CMAKEDEFINE_VAR2@
/**
* define 会直接根据规则来替换
*/
#define DEFINE_VAR1 @DEFINE_VAR1@
#define DEFINE_VAR2 ${DEFINE_VAR2}
**tutorial.cpp ** 文件内容
// 计算平方根的简单程序。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "Config.h"
int main (int argc, char *argv[]) {
#ifdef CMAKEDEFINE_VAR1
fprintf(stdout,"CMAKEDEFINE_VAR1 = %d\n", CMAKEDEFINE_VAR1);
#endif
#ifdef CMAKEDEFINE_VAR2
fprintf(stdout,"CMAKEDEFINE_VAR2 = %d\n", CMAKEDEFINE_VAR2);
#endif
#ifdef DEFINE_VAR1
fprintf(stdout,"DEFINE_VAR1 = %d\n", DEFINE_VAR1);
#endif
#ifdef DEFINE_VAR2
fprintf(stdout,"DEFINE_VAR2 = %d\n", DEFINE_VAR2);
#endif
return 0;
}
make.sh
保存一些指令(这个非必须)
#!/bin/sh
# 删除一些产生的文件
rm -rf CMakeFiles
rm cmake_install
rm Makefile
rm Config.h
rm DEMO
rm CMakeCache.txt
rm -rf ./vscode
rm cmake_install.cmake
cmake ./
make
./DEMO
3.1 运行
sh make.sh
sh make.sh
-
生成一个
Config.h
配置文件,文件内容为:
/**
* This is the configure demo
* - CMAKEDEFINE_VAR1 = 1
* - CMAKEDEFINE_VAR2 = 0
* - DEFINE_VAR1 = 1
* - DEFINE_VAR2 = 0
*/
/**
* cmakedefine 会根据变量的值是否为真(类似 if)来变换为 #define VAR ... 或 #undef VAR
*/
#define CMAKEDEFINE_VAR1 1
/* #undef CMAKEDEFINE_VAR2 */
/**
* define 会直接根据规则来替换
*/
#define DEFINE_VAR1 1
#define DEFINE_VAR2 0
- 终端显示:
.....
Scanning dependencies of target DEMO
[ 50%] Building CXX object CMakeFiles/DEMO.dir/tutorial.cpp.o
[100%] Linking CXX executable DEMO
[100%] Built target DEMO
CMAKEDEFINE_VAR1 = 1
DEFINE_VAR1 = 1
DEFINE_VAR2 = 0
四、参考链接
https://cmake.org/cmake/help/v3.14/command/configure_file.html?highlight=cmakedefine
版权声明:本文为CodeMyDream原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。