cmake学习笔记

来源:互联网 发布:淘宝客服昵称怎么修改 编辑:程序博客网 时间:2024/05/29 17:50

cmake中预定的变量

CMAKE_PROJECT_NAME              返回通过PROJECT指令定义的项目名称,如果当前cmake文件没有定义,向上查找。CMAKE_CURRENT_SOURCE_DIR        当前处理的CMakeLists.txt所在的路径CMAKE_CURRENT_BINARY_DIR        target编译目录CMAKE_SOURCE_DIR                顶层CMakeLists.txt所在的路径CMAKE_BINARY_DIR                顶层编译目录CMAKE_LIBRARY_OUTPUT_DIRECTORY  目标动态库文件的存放位置CMAKE_RUNTIME_OUTPUT_DIRECTORY  目标二进制可执行文件的存放位置CMAKE_ARCHIVE_OUTPUT_DIRECTORY  目标静态库文件存放位置CMAKE_C_FLAGS                   设置C编译选项CMAKE_CXX_FLAGS                 设置C++编译选项CMAKE_BUILD_TYPE                控制Debug和Release模式CMAKE_INSTALL_PREFIX            控制make install安装位置CMAKE_VERBOSE_MAKEFILE          设置是否输出编译信息,on表示输出,等同于:make VERBOSE=1CMAKE_CXX_FLAGS_DEBUG           设置c++debug选项,如:"-g -Wall"CMAKE_CXX_FLAGS_RELEASE         设置c++release选项,如:"-O2 -Wall"EXECUTABLE_OUTPUT_PATH          重新定义目标二进制可执行文件的存放位置LIBRARY_OUTPUT_PATH             重新定义目标链接库文件的存放位置PROJECT_SOURCE_DIR              工程的根目录PROJECT_BINARY_DIR              运行cmake命令的目录

系统信息

CMAKE_MAJOR_VERSION         cmake主版本号,如2.8.6中的2CMAKE_MINOR_VERSION         cmake次版本号,如2.8.6中的8CMAKE_PATCH_VERSION         cmake补丁等级,如2.8.6中的6CMAKE_SYSTEM                系统名称,例如Linux-2.6.22CAMKE_SYSTEM_NAME           不包含版本的系统名,如LinuxCMAKE_SYSTEM_VERSION        系统版本,如2.6.22CMAKE_SYSTEM_PROCESSOR      处理器名称,如i686UNIX                        在所有的类UNIX平台为TRUE,包括OS X和cygwinWIN32                       在所有的win32平台为TRUE,包括cygwin

常用命令

cmake_minimum_required 设置cmake版本要求

cmake_minimum_required(VERSION 2.6)

建议放在顶层CMakeLists.txt文件的第一行。

project 指定工程名称

project(helloworld)

这个指令后,PROJECT相关的属性才能生效。

set 定义变量

set(SRC_LIST    test.cpp main.cpp)

message 输出信息

message("PROJECT_SOURCE_DIR=${PROJECT_SOURCE_DIR}")

add_executable 生成可执行文件

add_executable(helloworld ${SRC_LIST})add_executable(helloworld test.cpp main.cpp)

add_library 生成库文件

add_library(test SHARED test.cpp)       #生成动态库libtest.soadd_library(test STATIC test.cpp)       #生成静态库libtest.a

set_target_properties 设置输出的名字,设置动态库的版本和API版本

set_target_properties(test PROPERTIES VERSION 1.2)

该指令会设置动态库的版本,如:libtest.so.1.2,同时会建立软连接。

add_subdirectory 添加源文件子目录,并可以指定中间二进制和目标二进制的存放位置

add_subdirectory(common)add_subdirectory(common ${binary_dir})

include_directories 添加头文件搜索路径

include_directories(/usr/local/include ../include/)

相当于-I参数。

link_directories 添加非标准的共享库搜索路径

link_directories(/usr/local/thrift/lib ../lib/)

相当于-L参数。

target_link_libraries 为target添加需要链接的共享库

target_link_libraries(helloworld hello)

相当于-l参数。

add_definitions 向C/C++编译器添加-D定义

add_definitions(-D_DEBUG_ -DLINUX)

add_dependencies 定义target依赖的其他target

add_dependencies(helloworld hello)

编译依赖,控制模块编译顺序。

aux_source_directory 发现一个目录下所有的源文件并存储在变量中

aux_source_directory(./src/ SRC_LIST)

用于自动定义源文件。

install 安装文件

install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h DESTINATION ${CMAKE_BINARY_DIR}/include)install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in DESTINATION ${CMAKE_BINARY_DIR}/include/ RENAME config.h)install(PROGRAMS ${CMAKE_BINARY_DIR}/test ${CMAKE_BINARY_DIR}/bin)

make install时使用该指令。

include 包含指令

INCLUDE(file [OPTIONAL]) 用来载入CMakeLists.txt文件

INCLUDE(module [OPTIONAL])用来载入预定义的cmake模块

OPTIONAL参数的左右是文件不存在也不会产生错误

可以载入一个文件,也可以载入预定义模块(模块会在CMAKE_MODULE_PATH指定的路径进行搜索)

载入的内容将在处理到INCLUDE语句时直接执行

参考:
http://blog.csdn.net/wzzfeitian/article/details/40963457
https://cmake.org/cmake/help/v3.8/
https://cmake.org/cmake/help/cmake2.6docs.html

0 0
原创粉丝点击