Linux - CMake使用记录

原创 2013年01月27日 20:33:50

Ubuntu装好很久了,但一直没有开始正式地投入学习,最近意识到拖了太久,于是赶紧抓起来学习。


昨天到今天一直在研究CMake,这里就做一个记录。


首先记录一下,如何用CMake编译一个可执行程序:


假设有文件main.cpp,内有main函数,函数内编写了输出Hello world的简单代码。

想编译该代码,需要做以下几步

1.在代码目录下新建CMakeLists.txt

这个文件阐述了产生Makefile的细节,例如针对哪个平台怎么编译,编译哪几个文件,包含哪个静态库等等。在Windows下工作的时候,这些东西都是VS帮忙完成的,当然,在linux下也是有集成开发环境的,但CMake其实更加的强大。(至于具体怎么强大,慢慢就知道了)


2.编辑CMakeLists.txt,输入:

PROJECT(HELLO) #这条命令的意思是:工程名为HELLO
ADD_EXECUTABLE(hello main.cpp) #这条命令的意思是:生成一个可执行文件,名叫hello,编译main.cpp(如果有多个CPP,就都写上,以空格分割)。

保存,退出


3.在代码目录下输入cmake .(注意,这里有个“.”),回车

“.”的意思是当前目录,这个命令简单来讲就是根据当前目录下的CMakeLists.txt创建Makefile了,这时该目录下应该会出现Makefile以及CMake的一些中间文件


4.然后输入make(单线程编译)或者make -jN(多线程编译:例如make -j4,即使用4个线程编译),根据CMake生成的Makefile编译,此时,在该目录下应该就出现了一个名为hello的可执行文件了


接着,问题来了:如果代码目录下有很多文件,难道要在CMakeLists.txt里一一列举吗?这是何其蛋疼的事情?当然,CMake不会这样对待我们的。

只需在ADD_EXECUTABLE之前,加上命令:

FILE(GLOB_RECURSE SRC_LIST "*.cpp")

这个命令将把该目录下及所有子文件夹内的所有后缀为.cpp的文件的路径,全部放入SRC_LIST这个变量中。

然后,将ADD_EXECUTABLE这句修改一下,使用SRC_LIST这个变量作为ADD_EXECUTABLE的第二个参数:

ADD_EXECUTABLE(hello ${SRC_LIST}) #在CMakeLists中,引用变量的方法为${变量名}

这样一来,无论工程目录下有多少个文件,都无需再手动去修改CMakeLists.txt了。

当工程加入新的文件时,只需使用cmake .命令,让CMake重新生成Makefile就一切OK。

如果工程的文件/目录没有发生增删,要重新编译只需make命令就可以了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

CMake中的字符串及文件操作

write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件  以前写过一篇关于CMake的基本用法的文章(现代软件构建系统的使用 cmak...

CMakeFile命令之file

file:文件操作命令. file(WRITE filename "message towrite"... ) WRITE 将一则信息写入文件’filename’中,如果该文件存在...
  • bytxl
  • bytxl
  • 2015-09-08 10:25
  • 1900

【使用CMake组织C++工程】3:CMake 函数和宏

这篇文章分享一下CMake中函数:function, 和宏:macro的使用。本文先从二者区别说起,由于二者区别很小,所以后文就仅对函数的用法进行讨论,因为函数有作用域的概念,适用范围更广。后文分享一...
  • elloop
  • elloop
  • 2016-04-12 09:26
  • 3469

CMake添加预定义宏

ADD_DEFINITIONS(-D宏名称 -D宏名称......)

CMakeFile命令之file

file:文件操作命令. file(WRITE filename "message towrite"... ) WRITE 将一则信息写入文件’filename’中,如果该文件存在,它会覆...

cmake使用示例与整理总结

本文源码托管于github上cmake_demo cmake中一些预定义变量 PROJECT_SOURCE_DIR 工程的根目录PROJECT_BINARY_DIR 运行cmake命令的目录,通...

一个弱智问题, Ubuntu 中gedit 菜单栏在哪里?

Ubuntu 所有的软件的菜单栏都移到了系统的顶部,习惯了 Windows 的用户习惯看 gedit 工具栏的上面。。。如图,鼠标移动到 Text Editor 哪里菜单栏出来了,这个问题憋了好几个月...

ubuntu的gedit没有工具栏了

ubuntu有个缺点,装的软件的版本必须与系统版本匹配,不然就会有问题。 比如我现在的ubuntu是14.04,那么我的gedit版本就应该是3.10.4。如果不小心把gedit版本升上去了,那就需要...

cmake配置基本工程和多线程

什么是cmake?大家都知道自linux上些的c/c++程序,在编译链接单个或者多个文件时为了方便,我们都会写一个MakeFile文件,然后在命令行执行make命令。cmake就是生成MakeFile...

C++编程(五)--- Cmake详解&Makefile详解

C/C++程序员肯定离不开Makefile和Cmake,因为如果对这两个工具不熟悉,那么你就不是一个合格的C/C++程序员。本文对Makefile和Cmake,及它们的使用进行了详细的介绍,本文的目录...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)