您的位置:首页 > 运维架构 > Linux

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。

还有很多命令,目前只用到了这么多,后续用到再进行记录。

三、一个例子

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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: