- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CMake从入门到精通
例子一 单个源文件 main.c
例子二 ==分解成多个 main.c hello.h hello.c
例子三 ==先生成一个静态库,链接该库
例子四 ==将源文件放置到不同的目录
例子五 ==控制生成的程序和库所在的目录
例子六 ==使用动态库而不是静态库
例子一
一个经典的C 程序,如何用cmake 来进行构建程序呢?
//main.c
#include stdio.h
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 .. -GNMake Makefiles
nmake
或者
cmake .. -GMinGW 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 stdio.h
#include hello.h
void hello(const char * name)
{
printf (Hello %s!/n, name);
}
main.c
#include hello.h
int main()
{
hello(World);
return 0;
}
文档评论(0)