cmake常用语法参考

《cmake常用语法参考》

  利用cmake来构建C++工程是一个非常方便的选择,尤其是依赖的库比较多的时候,或者工程比较大的时候都非常方便,这里记录一些cmake常用的语法,

Key Words:cmake


Beijing, 2019

Code:

Agile Pioneer  

CMakeLists语法参考

1. cmake常用语法

定义变量
SET(ENV x86)

MESSAGE(${ENV})  # 打印变量

# 定义宏参数
ADD_DEFINITIONS(-D_GLIBCXX_USE_CXX11_ABI=0)

# 指定编译结果存放路径
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../release)
条件控制语句
SET(ENV x86)
IF(ENV STREQUAL x86)

ELSE()

ENDIF()
指定引用库
#### 指定头文件路径
INCLUDE_DIRECTORIES()

#### 指定包含所需库文件的文件夹
LINK_DIRECTORIES()

#### 指定所需库文件
LINK_LIBRARIES()
引入OpenMP
FIND_PACKAGE(OpenMP)
if(OPENMP_FOUND)
	message("********openmp found")
	SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_C_FLAGS}")
	SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()
收集编译文件
#### 把src文件夹下的所以.cpp文件赋值给SRC变量
FILE(GLOB SRC "./src/*.cpp")
编译语法
#### 编译可执行文件
ADD_EXECUTABLE(XXXExe ${SRC})

#### 编译动态库文件|静态库文件
ADD_LIBRARY(XXXLIB SHARED ${SRC})
ADD_LIBRARY(XXXLIB STATIC ${SRC})

#### 给编译的文件连接其依赖的库文件
TARGET_LINK_LIBRARIES(XXXExe ${LIBS})
install 语法
#### make install命令 移动动态库和静态库文件
INSTALL(TARGETS lib lib_static
        LIBRARY DESTINATION ${YYY}/lib
        ARCHIVE DESTINATION ${YYY}/lib
        )

#### make install命令 移动文件夹
INSTALL(DIRECTORY xxx/xxx DESTINATION YYY/YYY)

#### make install命令 移动文件
INSTALL(FILES xxx.h xxx.hpp DESTINATION YYY/YYY)

2. cmake 执行命令

# 查看cmake能否通过FIND_PACKAGE找到OpenMP
cmake --help-module-list|grep OpenMP

# 存放FindXXX.cmake的默认路径
/usr/share/cmake-3.10/Modules


3. cmake INCLUDE

  有时候会有很多重复的变量会在各个项目中使用,这种情况我们不必重复的定义这些变量,对我而言OPENCV几乎用在所有的C++工程中,所以我不需要对每个工程的Cmakelists都重复的定义OPENCV的头文件和库文件,这就需要借助cmake语法中的INCLUDE方法,有两种方式:

  • 1、指定.cmake文件的绝对路径
    • INCLUDE(abs_path/xxx.cmake)
  • 2、指定CMAKE_MODULE_PATH后就可以对该文件夹下的.cmake文件通过文件名当作模块来引用了
    • INCLUDE(xxx)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值