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 describing option"
            [initial value])
Provide an option for the user to select as ON or OFF. If no initial value is provided, OFF is used.
option 提供选项让用户选择是 ON 或者 OFF ,如果没有提供初始化值,使用OFF。
也就是说默认的值是OFF。

但是请注意:这个option命令和你本地是否存在编译缓存的关系很大。
所以,如果你有关于 option 的改变,那么请你务必清理 CMakeCache.txt 和 CMakeFiles 文件夹。
还有,请使用标准的 [initial value] 值 ON 或者 OFF。

可以在命令行通过以下的方式设置选项
比如想打开 FOO_ENABLE 选项 -DFOO_ENABLE=ON
configure_file
configure_file 的作用是让普通文件也能使用CMake中的变量。
也就是说代码文件中可以使用CMake中的变量。
语法如下:
configure_file(<input> <output>
                    [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
                    [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
Copies an <input> file to an <output> file and substitutes variable values referenced as @[email protected] or ${VAR} in the input file content.
Each variable reference will be replaced with the current value of the variable, or the empty string if the variable is not defined.
Furthermore, input lines of the form:

拷贝一个 <input>(输入文件) 文件到 <output> (输出文件),并且替换输入文件中被 @[email protected] 或者 ${VAR} 引用的变量值。每一个变量将被替换成当前的变量值(注:CMake中的变量值)或者空串当变量未定义。

输入文件中的
#cmakedefine VAR ...
将被替换为
#define VAR ...
或者
/* #undef VAR */
下面看看各选项的意义
COPYONLY
    Copy the file without replacing any variable references or other content. This option may not be used with NEWLINE_STYLE.
    只拷贝文件,不进行任何的变量替换。这个选项在指定了 NEWLINE_STYLE 选项时不能使用(无效)。
ESCAPE_QUOTES
    Escape any substituted quotes with backslashes (C-style).
    躲过任何的反斜杠(C风格)转义。
    注:躲避转义,比如你有个变量在CMake中是这样的
    set(FOO_STRING "\"foo\"")
    那么在没有 ESCAPE_QUOTES 选项的状态下,通过变量替换将变为 ""foo"",如果指定了 ESCAPE_QUOTES 选项,变量将不变。
@ONLY
    Restrict variable replacement to references of the form @[email protected] This is useful for configuring scripts that use ${VAR} syntax.
    限制变量替换,让其只替换被 @[email protected] 引用的变量(那么 ${VAR} 格式的变量将不会被替换)。这在配置 ${VAR} 语法的脚本时是非常有用的。

NEWLINE_STYLE <style>
    Specify the newline style for the output file. Specify UNIX or LF for \n newlines, or specify DOS, WIN32, or CRLF for \r\n newlines. This option may not be used with COPYONLY.
    指定输出文件中的新行格式。UNIX 和 LF 的新行是 \n ,DOS 和 WIN32 和 CRLF 的新行格式是 \r\n 。 这个选项在指定了 COPYONLY 选项时不能使用(无效)。

Example

Consider a source tree containing a foo.h.in file:
#cmakedefine FOO_ENABLE
#cmakedefine FOO_STRING "@[email protected]"
An adjacent CMakeLists.txt may use configure_file to configure the header:
option(FOO_ENABLE "Enable Foo" ON)
if(FOO_ENABLE)
  set(FOO_STRING "foo")
endif()
configure_file(foo.h.in foo.h @ONLY)
This creates a foo.h in the build directory corresponding to this source directory. If the FOO_ENABLE option is on, the configured file will contain:
#define FOO_ENABLE
#define FOO_STRING "foo"
Otherwise it will contain:
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */
One may then use the include_directories() command to specify the output directory as an include directory:
include_directories(${CMAKE_CURRENT_BINARY_DIR})
so that sources may include the header as #include <foo.h>.
时间: 2024-10-08 08:03:25

cmake的两个命令: option 和 configure_file的相关文章

fedora美化桌面(两句命令拥有cairo-dock)

先晒我的桌面. 一直就很喜欢cairo-dock,在我的ubuntu一直用cairo-dock,今天闲来无事,也在公司这里装了一个,不过!公司电脑的屏幕真心比例不协调,看的我很郁闷-. 接下来入正题了. 在fedora下安装也是非常简单的. sudo yum install rpmfusion-* sudo yum install cairo-dock then,你就可以自己折腾la!! 不过fedora下拉消息框真心不喜欢!弄不掉不知道怎么破. fedora美化桌面(两句命令拥有cairo-d

SQL server(MSSQL)客户端工具登录数据库的两种命令行登录方式

我们安装了sqlserver服务器和sqlserver客户端工具之后,可以使用两种命令行方式登录数据库: >sqlwb -S servername或IP -E     #使用当前windows系统的账户登录sqlserver服务器 如下图: >sqlwb -S servername或IP -U username -P password     #使用数据库账户和密码登录sqlserver服务器 如下图: PS:安装好sqlserver数据库之后,默认sa账户无法登录,需要调整数据库服务配置才可

两条命令让cocos2d-x项目跑在android上

cocos2d-x3.0以来,目录中就多了一个叫setup.py的配置文件.运行它可以帮助我们迅速的配置必要的环境变量:cocos2d-x命令行的路径,android_sdk的路径,ant_root的路径,android_ndk的路径. 首先自然是要下载cocos2d-x3.0之后的版本,下载android_sdk,android_ndk,和ant. 等环境变量配置完成,我们就可以开始我们的新项目了. 我们使用cocos new命令来生成一个新的cocos2d-x项目. 所以只需输入 cocos

Linux下df与du两个命令的差别?

Linux下df与du两个命令的差别? 一.df显示文件系统的使用情况,与du比較,就是更全盘化. 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型. 举比例如以下: [[email protected] ~]# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/mapper/VolGroup-lv_root ext4 18134344 780860 16432296 5% / tmpf

linux中chmod与chown两个命令详解

在linux系统中chmod,chown命令都可以来设置权限了,但它们也是有区别的,下文小编为各位介绍chmod与chown两个命令用法与区别介绍. 今天要分享的2个命令也是我们平时常用的,chmod与chown看似拼写还有点差不多,但是两者的用途是不同的.chmod是用来设置文件夹和文件权限的,比如我们在VPS主机中文件不可读写,需要用来设置777权限:而chown是用来设置用户组的,比如授权某用户组,方便控制用户权限. 具体的使用我们用实例解答,那些所谓的各种参数命令我不喜欢分享,因为平时也

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

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

两款命令行下的翻译工具: sdcv &amp; translate-shell

现今打开浏览器有各种相关插件可用,取词翻译等唾手可得,但在命令行下浏览资料时遇到生词复制到到网上搜索,一来一回比较烦,于是找到了两款工具,分别介绍一下吧: sdcv安装后因为缺少字典,并不能直接使用,要到 http://download.huzheng.org/处下载,个人推荐 langdao-ec-gb langdao-ce-gb DrEye4in1 解压后放到~/stardict/dic/即可, 比如sdcv hello将显示hello的解释, 单独输入sdcv会启动交互模式, ~/.sdc