CheckSourceRuns

3.19 版本中新增。

检查给定源是否编译并链接到可执行文件,以及此可执行文件是否随后能够运行。

check_source_runs
check_source_runs(<lang> <code> <resultVar>
                  [SRC_EXT <extension>])

检查 <lang> 源一次,该源在 <code> 中提供,检查此源能否构建、链接为可执行文件,随后还能运行。 <code> 必须至少包含一个 main() 函数,或在 Fortran 中包含一个 program

结果存储在 <resultVar> 指定的内部高速缓存变量中。构建和运行成功由布尔值 true 指示。构建或运行失败则由布尔值 false 指示,如空字符串或错误消息。

默认情况下,测试源文件会被赋予一个与请求的语言相匹配的文件扩展名。 SRC_EXT 选项可用于改写这一默认设置,用 .<extension> 代替。

<code> 必须包含一个有效的 main 程序。例如:

check_source_runs(C
"#include <stdlib.h>
#include <stdnoreturn.h>
noreturn void f(){ exit(0); }
int main(void) { f(); return 1; }"
HAVE_NORETURN)

check_source_runs(Fortran
"program test
real :: x[*]
call co_sum(x)
end program"
HAVE_COARRAY)

在调用 check_source_runs() 之前,可以通过设置以下任意变量来影响编译和链接命令:

CMAKE_REQUIRED_FLAGS

要传递给编译器的一系列附加标志。该字符串必须用空格分隔——;-list 不适用于此。 CMAKE_<LANG>_FLAGS 的内容及其关联的配置特定变量会在 CMAKE_REQUIRED_FLAGS 内容之前自动添加到编译器命令中。

CMAKE_REQUIRED_DEFINITIONS

一个 ;-list,其中包含 -DFOO-DFOO=bar 形式的编译器定义。<resultVar> 指定的名称的定义也会自动添加。

CMAKE_REQUIRED_INCLUDES

传递给编译器的头搜索路径的 ;-list。这将是使用的唯一头搜索路径--将忽略 INCLUDE_DIRECTORIES 目录属性的内容。

CMAKE_REQUIRED_LINK_OPTIONS

在版本 3.14 中添加。

要添加到链接命令的选项的 ;-list(有关更多详细信息,请参见 try_compile())。

CMAKE_REQUIRED_LIBRARIES

要添加到链接命令的库的 ;-list。它们可以是系统库的名称,也可以是 导入目标(有关更多详细信息,请参见 try_compile())。

CMAKE_REQUIRED_LINK_DIRECTORIES

在版本 3.31 中添加。

要传递给链接器的库搜索路径的 ;-list(有关更多详细信息,请参见 try_compile())。

CMAKE_REQUIRED_QUIET

在版本 3.1 中添加。

如果此变量评估为布尔真值,则将抑制与检查关联的所有状态消息。