我有一个SConstruct文件正在检查Google protobuf库,如下所示:
main['HAVE_PROTOBUF'] = main['PROTOC'] and \
conf.CheckLibWithHeader('protobuf', 'google/protobuf/message.h',
'C++', 'GOOGLE_PROTOBUF_VERIFY_VERSION;')
我注意到对CheckLibWithHeader的调用返回“no”。我正在对脚本进行一些调试,对我来说很明显后来对CheckLibWithHeader的相同调用返回“是”。当我在SConstruct文件中紧跟上面一行后放入一条相同的行时,输出如下:
.
.
.
Checking for accept(0,0,0) in C++ library None... (cached) yes
Checking for zlibVersion() in C++ library z... (cached) yes
Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... (cached) no
Checking for GOOGLE_PROTOBUF_VERIFY_VERSION in C++ library protobuf... (cached) yes
Checking for clock_nanosleep(0,0,NULL,NULL) in C library None... no
Checking for clock_nanosleep(0,0,NULL,NULL) in C library rt... yes
.
.
.
我有protobuf库。有谁知道为什么第一次调用CheckLibWithHeader会返回“no”?
对我来说这个问题发生在CentOS中,但不是在Ubuntu中。
更新:我无法再现上述问题。但是,我发现当我遇到scons使用标记为“(缓存)”的值的问题时,我觉得可能有两个问题需要帮助我找到解决方案。我将在下面给出答案。
答案 0 :(得分:6)
--config=force
命令行选项应重新运行所有配置测试,而不查看缓存的结果。根据{{3}}:
--config=force
If this option is specified, all configuration tests will be re-run
regardless of whether the cached results are out of date. This can
be used to explicitly force the configuration tests to be updated in
response to an otherwise unconfigured change in a system header file
or compiler.
答案 1 :(得分:2)
我发现当我使用标记为"(缓存)"的值遇到scons问题时这似乎是不正确的,我可以做两件事来帮助解决问题。
检查" config.log" file,显示scons在运行检查时实际采取的操作。这将提供关于检查失败原因的提示。
删除文件" .sconsign.dblite"和目录" .sconf_temp"。这似乎清除了scons缓存,因为在下面构建"(缓存)"标记不会出现。