码迷,mamicode.com
首页 > 其他好文 > 详细

cmake-buildsystem

时间:2017-07-06 14:25:44      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:编译   macos   div   lin   share   程序   direct   work   color   

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

 

cmake-buildsystem

标签:编译   macos   div   lin   share   程序   direct   work   color   

原文地址:http://www.cnblogs.com/jason886/p/7125836.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!