cmake-buildsystem

1.简介

目标分类:可执行程序、库、自定义目标。可执行程序和库属于二进制目标,自定义目标包含一些自定义命令。

2.二进制目标

add_executable() : 定义可执行程序

add_library() : 定义库。

target_link_libraries() : 定义二进制目标之间的依赖关系。

例:

add_library(archive archive.cpp zip.cpp lzma.cpp)
add_executable(zipapp zipapp.cpp)
target_link_libraries(zipapp archive)

archive定义为一个静态库(static library),包含archive.cpp,zip.cpp和lzma.cpp编译的目标文件。

zipapp定义为一个可执行程序,通过编译和连接zipapp.cpp得到。

当连接zipapp的时候,archive静态库被连入。

3.执行体

4.库

静态库与动态库:

默认情况下,add_library()定义静态库,通过指定SHARED 类型,可以定义动态库。

add_library(archive SHARED archive.cpp zip.cpp lzma.cpp)
add_library(archive STATIC archive.cpp zip.cpp lzma.cpp)

变量BUILD_SHARED_LIBS的值可用于改变默认生成静态库的行为。

MODULE库:

与上述不同,它不用于target_link_libraries()的参数。

add_library(archive MODULE 7z.cpp)

Apple Frameworks:

一个SHARED库可被标记为FRAMEWORK属性,用于创建OS X或iOS Framework Bundle。

通过MACOSX_FRAMEWORK_IDENTIFIER设置CFBundleIdentifier Key。

add_library(MyFramework SHARED MyFramework.cpp)
set_target_properties(MyFramework PROPERTIES
  FRAMEWORK TRUE
  FRAMEWORK_VERSION A
  MACOSX_FRAMEWORK_IDENTIFIER org.cmake.MyFramework
)

Object库:

Object库同样不能被连入,它定义了非打包的目标文件,这些目标文件通过编译指定的源文件得到。目标文件可作为源输入到其他目标。

add_library(archive OBJECT archive.cpp zip.cpp lzma.cpp)

add_library(archiveExtras STATIC $<TARGET_OBJECTS:archive> extras.cpp)

add_executable(test_exe $<TARGET_OBJECTS:archive> test.cpp)

Build Specification and Usage Requirements

target_include_directories()、target_compile_definitions()、target_complie_options()分别修改目标的INCLUDE_DIRECTORIES、COMPILE_DEFINITIONS、COMPILE_OPTIONS属性,和INTERFACE_INCLUDE_DIRECTORIES、INTERFACE_COMPILE_DEFINITIONS、INTERFACE_COMPILE_OPTIONS属性。

每个命令都有三种模式:PRIVATE、PUBLIC和INTERFACE。

PRIVATE:只影响non-INTERFACE_属性变量。

INTERFACE:只影响INTERFACE_属性变量。

public:两者都影响。

target_compile_definitions(archive
  PRIVATE BUILDING_WITH_LZMA
  INTERFACE USING_ARCHIVE_LIB
)

目标属性

INCLUDE_DIRECTORIES 中的条目会被加到编译命令的 -I或-isystem后面。

COMPILE_DEFINITIONS中的条目会被加到编译命令的-D或/D后面,顺序未指定。DEFINE_SYMBOL目标属性可以为SHARED和MODULE库添加指定顺序的compile definition。

COMPILE_OPTIONS中的条目:escaped for the shell

时间: 2024-10-20 09:06:38

cmake-buildsystem的相关文章

cmake中文帮助文档

CMake的 在这个页面 了解CMake的生成命令 在摇篮使用cmake变量 报告问题 使用过Android Studio 2.2及更高版本,可以使用NDK和CMake的 编译C和C ++代码到本机库.Android Studio中,然后构建系统使用Gradle把library打包到APK中 如果您是初次使用CMake的与Android Studio ,去C和C ++代码添加到您的项目学习添加原生资源到项目的基础,创造了CMake的构建脚本,并添加您的CMake项目作为一个gradle依赖.此页

CMake入门教程

CMake入门教程 参考文献:http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/index.html 官方网址:http://www.cmake.org/ 下载网址:http://www.cmake.org/download/ 当前版本:3.1rc3 本文基于CMake 2.8版本编写. CMake 是一个跨平台的,开源的构建系统(BuildSystem).CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建

cmake的四个命令:add_compile_options()add_definitions()target_compile_definitions()build_command()

* add_compile_options() Adds options to the compilation of source files. 增加源文件的编译选项. add_compile_options(<option> ...) Adds options to the compiler command line for targets in the current directory and below that are added after this command is invo

GNU开发工具——CMake快速入门

GNU开发工具--CMake快速入门 一.CMake简介 不同Make工具,如GNU Make.QT的qmake.微软的MS nmake.BSD Make(pmake)等,遵循着不同的规范和标准,所执行的Makefile格式也不同.如果软件想跨平台,必须要保证能够在不同平台编译.而如果使用Make工具,必须为不同的Make工具编写不同的Makefile.CMake是一个比Make工具更高级的编译配置工具,是一个跨平台的.开源的构建系统(BuildSystem).CMake允许开发者编写一种平台无

哪位大兄弟有用 cMake 开发Android ndk的

一直用 Android studio 开发ndk,但是gradle支持的不是很好,只有experimental 版本支持 配置各种蛋疼.主要每次新建一个module都要修改配置半天.之前也看到过google 开发文档有提到 cmake 但是一直没用.哪位大兄弟用过,说下经验 哪位大兄弟有用 cMake 开发Android ndk的 >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007205830/哪位

cmake Debug模式和Release模式

在cmake中要编译debug模式的话,在CMakeLists.txt中添加如下两行 (不写就用默认的值) SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ") SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall") 然后,在编译的时候,使用如下命令: cmake -DCMAKE_BUILD_TYPE=Debug/Release  pa

mcstructs使用CMake生成Makefile文件

CMakeLists.txt project(MCSTRUCTS) set(SRC_LIST src/main.c src/mcslist.c src/mcsringbuf.c) add_executable(mcstructs ${SRC_LIST}) 执行过程: [email protected]:~/projects/mcstructs$ cmake . -- Configuring done -- Generating done -- Build files have been writ

【工具】Cmake与gcc的关系

1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C.C++.Objective-C.Fortran.Java等等). 2.当你的程序只有一个源文件时,直接就可以用gcc命令编译它. 3.但是当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大 4.所以出现了make工具,make工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式-通过调用m

cmake编译安装mysql5.5

CMAKE方式编译安装Mysql5.5 1.源码cmake方式编译安装MySQL5.5.32 安装前先安装: yum install ncurses-devel -y 1.1 下载Mysql和cmake安装包: wget http://wwwNaNake.org/files/v2.8/cmake-2.8.8.tar.gz 1.2 查看系统环境 cat /etc/redhat-release uname -r uname -m 1.3 安装cmake包 tar zxf cmake-2.8.8.ta

windows下使用cmake+mingw配置makefile

前面一节说了cmake简易使用,但是实际开发中项目文件非常多,使用哪种简易方式会导致代码十分混乱,因此本文介绍一种cmake管理大型项目的demo流程. 具体步骤如下: 1.创建相关的项目目录 [cpp] view plain copy cmd mkdir hello cd hello mkdir inlude lib src debug 其中inlucde用来存放头文件,lib用来存放库文件,src用来存放源程序,debug用来作调试,类似于qt等IDE环境的配置 [cpp] view pla