c语言从入门到精通 tc,CMake从入门到精通.pdf

CMake从入门到精通

例子一 单个源文件 main.c

例子二 ==>分解成多个 main.c hello.h hello.c

例子三 ==>先生成一个静态库,链接该库

例子四 ==>将源文件放置到不同的目录

例子五 ==>控制生成的程序和库所在的目录

例子六 ==>使用动态库而不是静态库

例子一

一个经典的C 程序,如何用cmake 来进行构建程序呢?

//main.c

#include

int main()

{

printf("Hello World!/n");

return 0;

}

编写一个 CMakeList.txt 文件(可看做cmake 的工程文件):

project(HELLO)

set(SRC_LIST main.c)

add_executable(hello ${SRC_LIST})

然后,建立一个任意目录(比如本目录下创建一个build 子目录),在该build 目录下调用cmake

 注意:为了简单起见,我们从一开始就采用cmake 的 out-of-source 方式来构建(即

生成中间产物与源代码分离),并始终坚持这种方法,这也就是此处为什么单独创建

一个目录,然后在该目录下执行 cmake 的原因

cmake .. -G"NMake Makefiles"

nmake

或者

cmake .. -G"MinGW Makefiles"

make

即可生成可执行程序 hello(.exe)

目录结构

+

|

+ main.c

+ CMakeList.txt

|

/--+ build/

|

+ hello.exe

cmake 真的不太好用哈,使用cmake 的过程,本身也就是一个编程的过程,只有多练才行。

我们先看看:前面提到的这些都是什么呢?

CMakeList.txt

第一行project 不是强制性的,但最好始终都加上。这一行会引入两个变量

 HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR

同时,cmake 自动定义了两个等价的变量

 PROJECT_BINARY_DIR 和PROJECT_SOURCE_DIR

因为是out-of-source 方式构建,所以我们要时刻区分这两个变量对应的目录

可以通过message 来输出变量的值

message(${PROJECT_SOURCE_DIR})

set 命令用来设置变量

add_exectuable 告诉工程生成一个可执行文件。

add_library 则告诉生成一个库文件。

 注意:CMakeList.txt 文件中,命令名字是不区分大小写的,而参数和变量是大小写

相关的。

cmake 命令

cmake 命令后跟一个路径(..),用来指出 CMakeList.txt 所在的位置。

由于系统中可能有多套构建环境,我们可以通过-G 来制定生成哪种工程文件,通

过cmake -h 可得到详细信息。

要显示执行构建过程中详细的信息( 比如为了得到更详细的出错信息),可以在 CMakeList.txt

内加入:

 SET( CMAKE_VERBOSE_MAKEFILE on )

或者执行make 时

 $ make VERBOSE=1

或者

 $ export VERBOSE=1

 $ make

例子二

一个源文件的例子一似乎没什么意思,拆成3 个文件再试试看:

 hello.h 头文件

#ifndef DBZHANG_HELLO_

#define DBZHANG_HELLO_

void hello(const char* name);

#endif //DBZHANG_HELLO_

 hello.c

#include

#include "hello.h"

void hello(const char * name)

{

printf ("Hello %s!/n", name);

}

 main.c

#include "hello.h"

int main()

{

hello("World");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值