这篇文章主要讲解了“Cmake怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Cmake怎么使用”吧!
1、多个源文件,使用命令 aux_source_directory(dir var):
在上一篇文章最后结尾的时候,有一个问题,就是在同一目录下面,有多个源文件的时候,这个时候你不能都往下面第三条命令里面一直手动添加源文件,那工作效率多低啊:
cmake_minimum_required(VERSION 2.8)project(main)add_executable(main main.c test1.c)
于是乎为了解决这种低效率的操作,在 cmake 里面有一条指令可以完全搞定这个问题;不过为了说明问题,在这之前我又添加了两个文件:test2.c 和 test2.h:
root@txp-virtual-machine:/home/txp/test# ls1 cmake_install.cmake main.c test1.h touch2.cCMakeCache.txt CMakeLists.txt Makefile test2.c touch2.hCMakeFiles main test1.c test2.h
test2.c内容如下:
#include <stdio.h>#include "test2.h"void func1(){ printf("i like the cmake\n");}
test2.h内容如下:
#ifndef _TEST2_H_#define _TEST2_H_void func1();#endif
最后main.c里面调用了func1函数:
#include <stdio.h>#include "test1.h"#include "test2.h"int main(void){ func1(); func(8); printf("TXP嵌入式\n"); return 0;}
接下来我们的重点就来了,在cmake里面可以使用aux_source_directory(dir var)就可以搞定上面效率低的问题,接下来我们在CMakeLists.txt这样操作:
cmake_minimum_required(VERSION 2.8)project(main)aux_source_directory(. SRC_LIST)add_executable(main ${SRC_LIST})
然后再进行编译:
root@txp-virtual-machine:/home/txp/test# cmake .-- Configuring done-- Generating done-- Build files have been written to: /home/txp/testroot@txp-virtual-machine:/home/txp/test# makeScanning dependencies of target main[ 25%] Building C object CMakeFiles/main.dir/main.c.o[ 50%] Linking C executable mainroot@txp-virtual-machine:/home/txp/test# ./maini like the cmakethe b is 8TXP嵌入式
说明:
aux_source_directory(. SRC_LIST):表示是把当当前目录下的所有源文件都添加到源列表变量里面去,最后用add_executable(main ${SRC_LIST})把所有有用的源文件加工成目标文件main。不过这方法也有他的缺点,就是把当前目录下的源文件都添加到变量SRC_LIST,如果我们不需要一些没有用的文件(只要拿到所需的源文件就行),可以进行这样操作:
cmake_minimum_required(VERSION 2.8)project(main)set(SRC_LIST ./main.c ./test1.c ./test2.c )add_executable(main ${SRC_LIST})
这样是能够通过编译的:
root@txp-virtual-machine:/home/txp/test# cmake .-- Configuring done-- Generating done-- Build files have been written to: /home/txp/testroot@txp-virtual-machine:/home/txp/test# make[100%] Built target main
2、在上面的例子中,我们会发现同一目录下源文件比较乱,所以在cmake里面有这样的规则,可以把相同类型以及相关的源文件放到同一个目录,比如说,现在我在test目录下创建test1和test2两个目录文件,并同时把test1.c、test1.h、test2.c、test2.h分别放到这两个目录下去:
root@txp-virtual-machine:/home/txp/test# mkdir -p test1 test2root@txp-virtual-machine:/home/txp/test# ls@ CMakeFiles main test1 test21 cmake_install.cmake main.c test1.c test2.cCMakeCache.txt CMakeLists.txt Makefile test1.h test2.h
然后把相关文件一到这两个目录文件下去:
root@txp-virtual-machine:/home/txp/test# mv test1.c test1.h test1root@txp-virtual-machine:/home/txp/test# mv test2.c test2.h test2root@txp-virtual-machine:/home/txp/test# ls@ CMakeCache.txt cmake_install.cmake main Makefile test21 CMakeFiles CMakeLists.txt main.c test1root@txp-virtual-machine:/home/txp/test# tree├── cmake_install.cmake├── CMakeLists.txt├── main├── main.c├── Makefile├── test1│ ├── test1.c│ └── test1.h└── test2 ├── test2.c └── test2.h
然后这个时候要修改CMakeLists.txt里面的规则属性了:
cmake_minimum_required(VERSION 2.8)project(main)include_directories(test1 test2)aux_source_directory(test1 SRC_LIST)aux_source_directory(test2 SRC_LIST1)add_executable(main main.c ${SRC_LIST} ${SRC_LIST1})
然后编译输出,也是能够通过的:
root@txp-virtual-machine:/home/txp/test# cmake .-- Configuring done-- Generating done-- Build files have been written to: /home/txp/testroot@txp-virtual-machine:/home/txp/test# makeScanning dependencies of target main[ 25%] Building C object CMakeFiles/main.dir/main.c.o[ 50%] Building C object CMakeFiles/main.dir/test1/test1.c.o[ 75%] Building C object CMakeFiles/main.dir/test2/test2.c.o[100%] Linking C executable main[100%] Built target mainroot@txp-virtual-machine:/home/txp/test# ls@ CMakeCache.txt cmake_install.cmake main Makefile test21 CMakeFiles CMakeLists.txt main.c test1root@txp-virtual-machine:/home/txp/test# ./maini like the cmakethe b is 8TXP嵌入式
感谢各位的阅读,以上就是“Cmake怎么使用”的内容了,经过本文的学习后,相信大家对Cmake怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4065875/blog/4416370