CMake学习笔记1.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CMake学习笔记1

最大的Qt4程序群(KDE4)采用cmake作为构建系统 Qt4的python绑定(pyside)采用了cmake作为构建系统 开源的图像处理库 opencv 采用cmake 作为构建系统 ... 看来不学习一下cmake是不行了,一点一点来吧,找个最简单的C程序,慢慢复杂化,试试看: 例子一 单个源文件 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; } 然后准备好CMakeList.txt 文件 project(HELLO) set(SRC_LIST main.c hello.c) add_executable(hello ${SRC_LIST}) 执行cmake的过程同上,目录结构 + | +--- main.c +--- hello.h +--- hello.c +--- CMa

文档评论(0)

qwd513620855 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档