cmake学习

1. CHECK_CXX_COMPILER_FLAG

检查CXX编译器是否支持给定的flag
必须先include(CheckCXXCompilerFlag)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(<flag> <var>)
CHECK_CXX_COMPILER_FLAG 赋值给的var是个bool型
例子:

include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
   add_definitions(-DCOMPILEDWITHC11)
   message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
   add_definitions(-DCOMPILEDWITHC0X)
   message(STATUS "Using flag -std=c++0x.")
else()
   message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()

2. cmake常用命令

include_directories 指定头文件的搜索路径,相当于指定gcc编译器的-I参数

link_directories 动态链接库或静态链接库的搜索路径,相当于指定gcc的-L参数

add_subdirectory 包含子目录,当工程包含多个子目录时,此命令有用

add_definitions 添加编译参数,比如add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义

add_executable 编译可执行程序

target_link_libraries 指定链接库,相同于指定-l参数

3.cmake 内置变量

CMAKE_C_COMPILER 指定C编译器,通常,CMake运行时能够自动检测C语言编译器。进行嵌入式系统开发时,通常需要设置此变量,指定交叉编译器。

CMAKE_CXX_COMPILER 指定C++编译器

CMAKE_C_FLAGS 指定编译C文件时编译选项,比如-g指定产生调试信息。也可以通过add_definitions命令添加编译选项。

EXECUTABLE_OUTPUT_PATH 指定可执行文件存放的路径。

LIBRARY_OUTPUT_PATH 指定库文件放置的路径

BUILD_SHARED_LIBS Switch between shared and static libraries

CMAKE_BUILD_TYPE build 类型(Debug, Release),-DCMAKE_BUILD_TYPE=Debug

内置变量的使用:

在CMakeLists.txt中指定,使用set
cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • cmake 学习笔记 最近接触到一些工程上的代码,都是用cmake来编译的,每次看着CMakeLists.txt ...
    thinkpp阅读 12,645评论 0 1
  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 14,199评论 11 79
  • 搬运自本人 CSDN 博客:https://blog.csdn.net/ajianyingxiaoqinghan/...
    琦小虾阅读 15,533评论 0 11
  • CMake学习 参考自《Cmake Practice --Cjacker》 基本语法规则 变量的引用 变量使用${...
    techping阅读 6,345评论 0 6
  • CMkae主要的开关选项 1,CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用来控制 IF ...
    jartus阅读 4,900评论 0 0