CMAKE/CMAKEList.txt 学习

1、cmake_minimum_required(VERSION 2.8)

cmake最低版本,如果CMake的当前版本低于指定的版本,它会停止处理工程文件,并报告错误

2、project(<projectname> [languageName1 languageName2 ...])

projectname:工程名

languageName:指定工程可以支持的语言。如project(Hello,C CXX),CXX即是C++

3、set( CMAKE_CXX_FLAGS "-std=c++11" )

添加c++11标准支持

4、find_package(包的名称及最低版本)

找到后面需要库和头文件的包

例如find_package(OpenCV 2.4.3 REQUIRED)

5、include_directories("路径")

比如:

include_directories(

      ${PROJECT_SOURCE_DIR}

      ${PROJECT_SOURCE_DIR}/include

      ${EIGEN3_INCLUDE_DIR})

其中${ }是引用的表示方法

6、set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)

设置路径(下面生成共享库的路径),即生成的共享库在工程文件夹下的lib文件夹中

7、add_library(${PROJECT_NAME} SHARED src/cpp文件名 …… )

创建共享库(把工程内的cpp文件都创建成共享库文件,方便通过头文件来调用)

这时候只需要cpp,不需要有主函数

${PROJECT_NAME}是生成的库名 表示生成的共享库文件就叫做 lib工程名.so  

也可以专门写cmakelists来编译一个没有主函数的程序来生成共享库,供其它程序使用

8、target_link_libraries(${PROJECT_NAME} /usr/lib/i386-linux-gnu/libboost_system.so )

链接库,把刚刚生成的${PROJECT_NAME}库和所需的其它库链接起来

9、set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)

设置可执行文件生成路径

10、add_executable(要生成的可执行文件名 从工程目录下写起的主函数文件名)

可执行文件生成,凡是要编译的源文件都需要列举出来。

add_executable(hello_world src/hello_world.cpp src/main.cpp)

11、target_link_libraries(可执行文件名 ${PROJECT_NAME})

这个添加可执行文件所需的库(一般就是刚刚生成的工程的库),比如我们用到了libm.so(命名规则:lib+name+so),就添加该库的名称"m"

12、set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE]

)

将一个CMAKE变量设置为给定值

SET(CMAKE_BUILD_TYPE Release)

设置编译方式为Release,如果要求有比较高德运行方式,建议选择Release

如:

IF(NOT CMAKE_BUILD_TYPE)

        SET(CMAKE_BUILD_TYPE Release)

13、AUX_SOURCE_DIRECTORY(src DIR_SRCS)

源文件目录

 

14、cmake_policy

管理CMake的策略设置

 

 

C++创建工程如下:

$mkdir hellotest

$cd hellotest

$mkdir bin #可执行文件存放路径

$mkdir lib  #生成的.so文件存放路径

$mkdir include #头文件存放路径

$mkdir src #源文件存放路径

$mkdir build #编译文件存放路径

$touch CMakeLists.txt

$cd build

$cmake ..

$make

 

 

详细一点的版本:https://www.cnblogs.com/52php/p/5681745.html

 

posted @ 2020-04-01 04:34  会打架的程序员不是好客服  阅读(641)  评论(0编辑  收藏  举报