目录
一、try_run
try_run(<runResultVar> <compileResultVar> <bindir> <srcfile> [CMAKE_FLAGS <flags>...] [COMPILE_DEFINITIONS <defs>...] [LINK_OPTIONS <options>...] [LINK_LIBRARIES <libs>...] [COMPILE_OUTPUT_VARIABLE <var>] [RUN_OUTPUT_VARIABLE <var>] [OUTPUT_VARIABLE <var>] [WORKING_DIRECTORY <var>] [ARGS <args>...])
尝试编译一个<srcfile>。结果存于<compileResultVar>中。如果编译成功,则运行可执行文件并在<runResultVar>中返回其退出代码。如果生成了可执行文件,但未能运行,则<runResultVar>将设置为failed_to_run。
二、check_cxx_source_runs
检查是否可以在当前系统上编译、链接和运行C++代码。check_<lang>_source_runs 是CMake中try_run命令的包装器。
check_cxx_source_runs(<code> <resultVar>)
<code>必须包含一个main函数。
检查只执行一次,结果缓存在名为<resultVar>的变量中。每次后续的CMake运行都将重新使用该缓存值,而不是再次执行检查,即使<code>发生了更改。为了强制重新计算检查,必须手动从缓存中删除名为<resultVar>的变量。
#需要使用 CheckCSourceRuns.cmake 模块
include(CheckCSourceRuns)
#声明一个 _test_uuid 变量,其中包含要编译和运行的C代码段
set(_test_uuid
"
#include <uuid/uuid.h>
int main(int argc, char * argv[]) {
uuid_t uuid;
uuid_generate(uuid);
return 0;
}
")
set(CMAKE_REQUIRED_INCLUDES ${UUID_INCLUDE_DIRS})
set(CMAKE_REQUIRED_LIBRARIES ${UUID_LIBRARIES})
#调用 check_c_source_runs ,其中测试代码作为第一个参数, _runs 变量作为第二个参数,以保存执行的检查结果
check_c_source_runs("${_test_uuid}" _runs)
unset(CMAKE_REQUIRED_INCLUDES)
unset(CMAKE_REQUIRED_LIBRARIES)