linux 下使用CMake编译程序
2017-08-22 16:43
239 查看
一、基本流程
1、编写CMake配置文件CMakeList.txt;
2、执行cmake PATH ,其中PATH为CMakeList.txt所在的目录;
3、make.
二、相关语法
1、CMakeList.txt由命令、注释和空格组成。其中命令不区分大小写,使用‘#’进行注释,命令由命令名称、小括号和参数组成,多个参数间使用空格进行隔开;
2、cmake_minimum_required(version 3.1.0):指定运行CMakeList所需的CMake的最低版本为3.1.0;
3、project(Test):指定项目名称为 Test;
4、aux_source_directory(. src):查找当前目录下的所有源文件,将文件名保存到src;
5、add_subdirectory(sub):包含子目录 sub。在编译时先编译子目录下的CMakeLists.txt和源码;
6、include_directories(${xxx}):包含目录,指定头文件的搜索路径;
7、link_directories(${xxx}):包含库目录,指定外部动态或静态链接库的搜索路径;
8、 add_definitions(xxx):指定编译参数,如(-std=c++11);
9、target_link_libraries:指明编译程序所需的链接库;
10、add_executable(Test ${src}):将src包含的源文件编译生成可执行文件 Test;
11、add_library(Test STATIC /SHARED ${src}):将src所包含的源文件编译成静态/动态链接库;
12、find_package(name):调用预定义在 CMAKE_MODULE_PATH 下的 Find< name >.cmake 模块;
13、message(“xxx”):打印消息;
14、PROJECT_SOURCE_DIR:cmake预定义变量,表示工程的根目录;
15、set(src ${PROJECT_SOURCE_DIR}/src/test.cpp):自定义变量 src为对应目录下的文件test.cpp。
还有很多命令,目前只用到了这么多,后续用到再进行记录。
三、一个例子
这是一个调用opencv进行人脸检测的配置文件,需要将相关文件放在对应目录。在CMakeList.txt目录下执行:
进行编译:
![](https://img-blog.csdn.net/20170822163343387?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTW9uaWNhX18yMDEy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
接着执行: make,就会生成对应的可执行文件或链接库。
四、参考资料
在学习Linux下使用cmake编译程序过程中,参考了多位博主写的博文,以下是相关链接:
http://blog.csdn.net/fengbingchun/article/details/46685413
http://www.cnblogs.com/never–more/p/6921837.html
http://www.hahack.com/codes/cmake/
1、编写CMake配置文件CMakeList.txt;
2、执行cmake PATH ,其中PATH为CMakeList.txt所在的目录;
3、make.
二、相关语法
1、CMakeList.txt由命令、注释和空格组成。其中命令不区分大小写,使用‘#’进行注释,命令由命令名称、小括号和参数组成,多个参数间使用空格进行隔开;
2、cmake_minimum_required(version 3.1.0):指定运行CMakeList所需的CMake的最低版本为3.1.0;
3、project(Test):指定项目名称为 Test;
4、aux_source_directory(. src):查找当前目录下的所有源文件,将文件名保存到src;
5、add_subdirectory(sub):包含子目录 sub。在编译时先编译子目录下的CMakeLists.txt和源码;
6、include_directories(${xxx}):包含目录,指定头文件的搜索路径;
7、link_directories(${xxx}):包含库目录,指定外部动态或静态链接库的搜索路径;
8、 add_definitions(xxx):指定编译参数,如(-std=c++11);
9、target_link_libraries:指明编译程序所需的链接库;
10、add_executable(Test ${src}):将src包含的源文件编译生成可执行文件 Test;
11、add_library(Test STATIC /SHARED ${src}):将src所包含的源文件编译成静态/动态链接库;
12、find_package(name):调用预定义在 CMAKE_MODULE_PATH 下的 Find< name >.cmake 模块;
13、message(“xxx”):打印消息;
14、PROJECT_SOURCE_DIR:cmake预定义变量,表示工程的根目录;
15、set(src ${PROJECT_SOURCE_DIR}/src/test.cpp):自定义变量 src为对应目录下的文件test.cpp。
还有很多命令,目前只用到了这么多,后续用到再进行记录。
三、一个例子
cmake_minimum_required(VERSION 3.9.0) project(Test) add_definitions(-std=c++11) # use opencv find_package(OpenCV) if(NOT OpenCV_FOUND) message(WARNING "OpenCV not found!") else() include_directories(${OpenCV_INCLUDE_DIRS}) endif() # headers include_directories(${PROJECT_SOURCE_DIR}/include) set(SRC ${PROJECT_SOURCE_DIR}/src/test.cpp) #lib link link_directories(${PROJECT_SOURCE_DIR}/lib) add_executable(Test ${SRC}) target_link_libraries(Test ${OpenCV_LIBS})
这是一个调用opencv进行人脸检测的配置文件,需要将相关文件放在对应目录。在CMakeList.txt目录下执行:
cmake .
进行编译:
接着执行: make,就会生成对应的可执行文件或链接库。
四、参考资料
在学习Linux下使用cmake编译程序过程中,参考了多位博主写的博文,以下是相关链接:
http://blog.csdn.net/fengbingchun/article/details/46685413
http://www.cnblogs.com/never–more/p/6921837.html
http://www.hahack.com/codes/cmake/
相关文章推荐
- Linux下使用CMake编译程序
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- linux下用gcc编译使用了math库函数的程序出错的解决方法
- Linux下G++怎么编译使用Boost库的程序
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- 使用VS+VisualGDB编译调试Linux程序
- linux下用gcc编译使用了math库函数的程序出错的解决方法
- [Linux]在ubuntu系统下编译运行c程序并使用makefile管理项目
- Linux下使用gcc编译程序找不到库的分析和解决方法
- linux下用gcc编译使用了math库函数的程序出错的解决方法
- Linux makefile 教程 ,makefile 怎么使用 使用makefile 编译程序
- Android 运行 C/C++程序 (使用 arm-linux-gcc 交叉编译环境)
- 在linux下如何使用Makefile对fortran程序进行编译
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库
- aix 使用g++编译c++程序的编译选项 -- linux到aix移植经验
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。
- 使用VC+VA编写/编译/运行/调试linux程序