cmake的两个命令:option和configure_file
本节要讨论的是cmake的两个命令: option 和 configure_fileoption 选项,让你可以根据选项值进⾏条件编译。
configure_file 配置⽂件,让你可以在代码⽂件中使⽤CMake中定义的的变量*
option
Provides an option that the user can optionally select.option 提供⼀个⽤户可以任选的选项。语法如下option( \"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( [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
[NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])
Copies an file to an file and substitutes variable values referenced as @VAR@ 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:拷贝⼀个 (输⼊⽂件) ⽂件到 (输出⽂件),并且替换输⼊⽂件中被 @VAR@ 或者 ${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 @VAR@. This is useful for configuring scripts that use ${VAR} syntax.
限制变量替换,让其只替换被 @VAR@ 引⽤的变量(那么 ${VAR} 格式的变量将不会被替换)。这在配置 ${VAR} 语法的脚本时是⾮常有⽤的。
NEWLINE_STYLE