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 invoked.
See documentation of the directory and target COMPILE_OPTIONS properties.
为当前路径和下层路径的目标增加编译器命令行选项,选项在此命令被调用后添加。查看文档中关于路径和目标的编译选项属性。

This command can be used to add any options, but alternative commands exist to add preprocessor definitions
(target_compile_definitions() and add_definitions()) or include directories (target_include_directories() and include_directories()).
这个命令可以被用来添加任何的选项,但是存在替代命令增加预处理定义或包含路径。

Arguments to add_compile_options may use “generator expressions” with the syntax $<...>.
See the cmake-generator-expressions(7) manual for available expressions. See the cmake-buildsystem(7) manual for more on defining buildsystem properties.
add_compile_options的参数可以使用带语法$<...>的“生成表达式”。
关于有效的表达式可以查看cmake-generator-expressions(7)手册。关于更多的系统属性的定义可以查看cmake-buildsystem(7)助手。
*
add_definitions()
Adds -D define flags to the compilation of source files.

为源文件的编译添加由-D定义的标志。
add_definitions(-DFOO -DBAR ...)
Adds definitions to the compiler command line for targets in the current directory and below (whether added before or after this command is invoked).
This command can be used to add any flags, but it is intended to add preprocessor definitions (see the add_compile_options() command to add other flags).
Flags beginning in -D or /D that look like preprocessor definitions are automatically added to the COMPILE_DEFINITIONS directory property for the current directory.
Definitions with non-trivial values may be left in the set of flags instead of being converted for reasons of backwards compatibility.
See documentation of the directory, target, source file COMPILE_DEFINITIONS properties for details on adding preprocessor definitions to specific scopes and configurations.

为当前路径以及下层路径的目标加入编译器命令行定义(定义在命令调用之前或之后被添加,注:也就是不确定)。
这个命令可以用来添加任何标志,但是它的原意是用来增加预处理器的定义(查看add_compile_options()命令增加其它的定义)。
那些以-D或/D开头的标志,看起来像预处理器定义的flag,会被自动加到当前路径的COMPILE_DEFINITIONS属性中。
为了后向兼容,非简单值(non-trival,指的是什么?——译注)的定义会被留在flags组(flags set)里,而不会被转换。
关于在特定的域以及配置中增加预处理器的定义,参考路径、目标以及源文件的COMPILE_DEFINITIONS属性来获取更多的细节。

See the cmake-buildsystem(7) manual for more on defining buildsystem properties.
关于更多的系统属性的定义可以查看cmake-buildsystem(7)助手。
*
target_compile_definitions()
Add compile definitions to a target.
为目标增加编译定义。
target_compile_definitions(<target>
                           <INTERFACE|PUBLIC|PRIVATE> [items1...]
                           [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
Specify compile definitions to use when compiling a given <target>.
The named <target> must have been created by a command such as add_executable() or add_library() and must not be an Imported Target.

编译给定的<target>时使用指定的编译定义。<target>必须是add_executable()或者add_library()创建的,并且不是一个输入目标。

The INTERFACE, PUBLIC and PRIVATE keywords are required to specify the scope of the following arguments.
PRIVATE and PUBLIC items will populate the COMPILE_DEFINITIONS property of <target>.
PUBLIC and INTERFACE items will populate the INTERFACE_COMPILE_DEFINITIONS property of <target>.
The following arguments specify compile definitions. Repeated calls for the same <target> append items in the order called.

关键字INTERFACE,PUBLIC和PRIVATE用来指定其后参数的作用域。
PRIVATE和PUBLIC项将产生<target>的COMPILE_DEFINITIONS属性。
PUBLIC和INTERFACE项将产生<target>的INTERFACE_COMPILE_DEFINITIONS属性。
其后的参数指定编译定义。重复调用相同的目标将按照调用顺序追加(定义)。

Arguments to target_compile_definitions may use “generator expressions” with the syntax $<...>.
See the cmake-generator-expressions(7) manual for available expressions. See the cmake-buildsystem(7) manual for more on defining buildsystem properties.

target_compile_definitions的参数可以使用带语法$<...>的“生成表达式”。
关于有效的表达式可以查看cmake-generator-expressions(7)手册。关于更多的系统属性的定义可以查看cmake-buildsystem(7)助手。
*
build_command()
Get a command line to build the current project. This is mainly intended for internal use by the CTest module.
获取构建该工程的命令行。通常是供CTest模块的内部使用。
注:笔者给出了一个简单的例子在文档结尾。
build_command(<variable>
                  [CONFIGURATION <config>]
                  [TARGET <target>]
                  [PROJECT_NAME <projname&gt] # legacy, causes warning
                  )
Sets the given <variable&gt to a command-line string of the form:

 --build . [--config <config>] [--target <target>[-- -i]
where  is the location of the cmake(1) command-line tool, and <config> and <target> are the values provided to the CONFIGURATION and TARGET options, if any.
The trailing -- -i option is added for Makefile Generators if policy CMP0061 is not set to NEW.

When invoked, this cmake --build command line will launch the underlying build system tool.

build_command( )
This second signature is deprecated, but still available for backwards compatibility. Use the first signature instead.

It sets the given  to a command-line string as above but without the --target option.
The  is ignored but should be the full path to msdev, devenv, nmake, make or one of the end user build tools for legacy invocations.

Note In CMake versions prior to 3.0 this command returned a command line that directly invokes the native build tool for the current generator.
Their implementation of the PROJECT_NAME option had no useful effects, so CMake now warns on use of the option.

example
cmake_minimum_required(VERSION  2.8)
project(cmaketest)
#set(CMAKE_CXX_COMPILER "g++")
add_compile_options(-std=c++11 -w)
#add_definitions(-std=c++11)

build_command(BUILD_COMMAND_LINE CONFIGURATION ${CMAKE_BUILD_TYPE}
              PROJECT_NAME cmaketest TARGET all)
message("build command:${BUILD_COMMAND_LINE}")

message("using compiler ${CMAKE_CXX_COMPILER}")

add_executable(test main.cpp)
build command:/usr/bin/make -i "all"
using compiler /usr/bin/c++
// main.cpp

int main(int argc, char *argv[])
{
    int n = 5.5f;
    auto func = [&](int n) {return n < 5;};
    return 0;
}
时间: 2024-11-09 02:10:38

cmake的四个命令:add_compile_options()add_definitions()target_compile_definitions()build_command()的相关文章

图库Gallery3D(Gallery2)分析(四) 菜单命令执行过程分析

该分析基于 Android4.2的Gallery2 1 菜单创建过程分析. Gallery的父类是AbstractGalleryActivity类,AbstractGalleryActivity的父类是Activity类.所以菜单创建是调用的AbstractGalleryActivity的菜单创建函数. public class AbstractGalleryActivity extends Activity implements GalleryContext { private static

cmake的两个命令: option 和 configure_file

本节要讨论的是cmake的两个命令: option 和 configure_file option 选项,让你可以根据选项值进行条件编译. configure_file 配置文件,让你可以在代码文件中使用CMake中定义的的变量 option Provides an option that the user can optionally select. option 提供一个用户可以任选的选项.语法如下 option(<option_variable> "help string de

zookeeper 四字命令的shi yong

Linux中的命令NetCat有"瑞士军刀"的美誉.我们可以通过nc命令查看Zookeeper的一行属性数据.在Zookeeper中有很多四字命令,汇总如下: 序号 使用命令 输出说明  1 echo conf | nc 10.9.3.253 2181  输出Zookeeper相关服务的详细配置信息,如客户端端口,数据存储路径.最大连接数.日志路径.数据同步端口.主节点推举端口.session超时时间等等  2 echo cons | nc 10.9.3.253 2181  输出连接到

zookeeper 四字命令

ZooKeeper3.4.6支持某些特定的四字命令字母与其的交互.它们大多是查询命令,用来获取 ZooKeeper 服务的当前状态及相关信息.用户在客户端可以通过 telnet 或 nc 向 ZooKeeper 提交相应的命令. 其中stat.srvr.cons三个命令比较类似:"stat"提供服务器统计和客户端连接的一般信息:"srvr"只有服务的统计信息,"cons"提供客户端连接的更加详细的信息. 使用方式,在shell终端输入:echo

Zookeeper学习(二) 安装和四字命令

前言 在刚开始没有接触zookeeper的具体应用前,光看别人的描述,其实对它的实际应用其实不是特别清晰,所以慢慢从其基础应用开始了解其底层原理是很重要也是很必要的. 首先,安装Zookeeper并了解一下Zookeeper的基础命令.这个过程是非常简单的,正如zookeeper官网说的,zookeeper是可复制的,安装zookeeper的集群其实就是安装多个单机版的zookeeper,然后通过配置让每个zookeeper起来.因此,Zookeeper的安装有下列几种: 单机Zookeeper

【转】zookeeper之 zkServer.sh命令、zkCli.sh命令、四字命令

[FROM]https://www.cnblogs.com/andy6/p/7674028.html 一.zkServer.sh 1.查看 zkServer.sh 帮助信息 [[email protected] bin]# ./zkServer.sh help ZooKeeper JMX enabled by default Using config: /bigdata/zookeeper-3.4.10/bin/../conf/zoo.cfg Usage: ./zkServer.sh {star

CMake比较实用的命令小记

最近将项目迁移到CMake进行管理,对CMake进行了一些研究,觉得有一些命令非常实用但很少有资料提到,在这里做一个总结,至于太普通常用的命令就不提了. OPTION(OPTION_VAR "Description" [initial value]):用于管理编译选项,定义并初始化自定义变量. 例: OPTION(BUILD_TEST "Build the test project" ON) FIND_PATH(<VAR> name path1 path

CMake如何执行shell命令

我在cmake编译后想执行一些特定的shell命令(执行.lcov收集代码覆盖报告等),我又不想写到XX.sh的shell脚本中,如何直接通过CMake执行shell命令呢? 在网上翻江倒海了一下,找到了一个老外写的cmake脚本,参考他,自己写了下,终于实现了我的目标,主要是用ADD_CUSTOM_TARGET和EXECUTE_PROCESS来实现.具体实现我还是用经典的hello world来解释下: 在你的CMakeLists.txt中,加入以下代码: SET(RUN_HELLO_WORL

SuperSocket入门(四)-命令行协议

前面已经了解了supersocket的一些基本的属性及相关的方法,下面就进入重点的学习内容,通信协议.在没有看官方的文档之前,对于协议的理解首先想到的是TCP和UDP协议.TCP 和 UDP 是传输层协议.在Socket程序中仅仅定义了传输层协议是不能让网络的两端进行通信的.我们需要定义应用层通信协议把我们接收到的二进制数据转化成程序能理解的请求. 命令行协议是一种被广泛应用的协议.一些成熟的协议如 Telnet, SMTP, POP3 和 FTP 都是基于命令行协议的. 在SuperSocke