我有一个CMakeLists.txt文件,其中包含以下几行:

include(CheckSymbolExists)
check_symbol_exists(alloca stdlib.h;cstdlib ALLOCA_EXISTS)
check_symbol_exists(malloc stdlib.h;cstdlib MALLOC_EXISTS)

但是在CMake输出的相关部分,所有出现的是:
...
-- Looking for alloca
-- Looking for alloca - found
...

关于malloc的内容什么都没有出现。 CMake忽略了我的电话吗?还是正在发生其他事情?

编辑:

我什至尝试过...
unset(CMAKE_REQUIRED_QUIET)

...在每次调用check_symbol_exists之前,都无法解决问题。

最佳答案

要将列表作为单个参数传递给函数/宏,列表应该用括在双引号中:

# Double quotes are required around the list argument
check_symbol_exists(alloca "stdlib.h;cstdlib" ALLOCA_EXISTS)

仅当这是最后一个非位置参数时,才需要在列表参数周围加双引号:
# Here double quotes can be omited.
set(A a;b;c)

没有双引号,您的代码将解释为
check_symbol_exists(alloca stdlib.h cstdlib ALLOCA_EXISTS)
check_symbol_exists(malloc stdlib.h cstdlib MALLOC_EXISTS)

cstdlib成为宏的3-d参数,它表示应在其中存储结果的变量。给定变量是在第一次调用时创建的(检查alloca)。第二个调用(检查malloc)将检查变量,找到已设置的变量,并将其解释为“检查已执行”,并且不执行任何操作。

08-03 14:10