2017-06-16 125 views
1

我有一个的CMakeLists.txt文件,这些几行:CMake似乎忽略了一行?

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,这并没有解决问题之前。

+0

如果你添加了'--trace'参数到cmake命令它会给你更多的输出 –

回答

0

经过我的CMakeLists文件和文档阅读玩了很多后,我意识到我的错误是双重的。

首先,我没有把文件列表放在引号中,所以谢谢+ Tsyvarev的答案。

我意识到自己的错误读check_symbol_exists文档时的第二部分,并且发现这一点:

如果检查需要C++做,可以考虑使用CHECK_CXX_SYMBOL_EXISTS(),它不一样CHECK_SYMBOL_EXISTS (),但在C++中。

链接:CheckSymbolExists

于是我意识到我应该使用check_cxx_symbol_exists因为check_symbol_exists将不能够通过C++头看。

更改宏调用和导入行后,我的脚本按预期工作。

干杯!

3

为了传递一个列表单个参数的功能/宏,列表应括到双引号:约list参数

# 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)检查变量,发现它已被设置,将其解释为“检查已执行”,并且什么都不做。

+0

我刚试过这个,但它仍然不起作用... – Dovahkiin

+0

你是否修改过**这两行**办法? – Tsyvarev