对我好下面的命令作品:为什么cmake忽略Boost_NO_BOOST_CMAKE环境变量?
cmake ../ -DBoost_NO_BOOST_CMAKE=BOOL:ON
即cmake的忽略系统BoostConfig.cmake
,这正是我所需要的。但是,如果我尝试通过环境变量做相同的:
Boost_NO_BOOST_CMAKE=ON cmake ../
cmake的还是读BoostConfig.cmake
,我得到了以下错误:
CMake Error at /usr/lib64/boost/BoostConfig.cmake:64 (get_target_property):
我已经试过也设置为TRUE
,BOOL:ON
等还有。使用cmake 3.3.1版。任何提示?
UPDATE
添加
set(Boost_NO_BOOST_CMAKE TRUE)
到CMakeList.txt
效果很好,但在同一行加入PreLoad.cmake
没有。在第二种情况下,以跟踪和调试选项运行cmake的给出了以下第几行日志:
Configuring Debug su3-dense ...
Running with debug output on.
Running with trace output on.
/home/langr/projects/su3dense/PreLoad.cmake(1): set(Boost_NO_BOOST_CMAKE TRUE)
/home/langr/projects/su3dense/CMakeLists.txt(1): cmake_minimum_required(VERSION 3.0.0)
...
因此,PreLoad.cmake
文件显然是处理和变量Boost_NO_BOOST_CMAKE
设置。为什么这个设置被忽略?
更新2
我终于得到它通过写
set(Boost_NO_BOOST_CMAKE TRUE CACHE BOOL "" FORCE)
到PreLoad.cmake
工作。
如果我查看['FindBoost.cmake'](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake#L231)源代码,则此检查不适用于环境变量,但是对于'Boost_NO_BOOST_CMAKE'只有CMake变量。你可以给一个参考为什么这应该与一个环境变量?你的第一个'-D'调用似乎是有效的解决方案。 – Florian
@Florian:事实上,我不能,我是cmake的新手,并认为它会自动考虑所有内部变量的环境变量。我的第一个'-D'调用是一个有效的解决方案,但不幸的是,它需要我改变一些构建脚本作为Git项目的一部分。在我的'.bashrc'中设置一个环境变量将是一个更加优雅的解决方案。 –
可以在我的答案[这里](http://stackoverflow.com/questions/33758798/using-constant-folder-with-cmake/33790663#33790663)张贴的解决方案之一是可行的吗?你可以例如扩展你的主'CMakeLists.txt'以将环境变量的内容传递给CMake缓存变量。或者,如果您不想更改'CMakeLists.txt',则可以将代码放入'PreLoad.cmake'中(详细信息请参见[这里](http://stackoverflow.com/questions/30503631/cmake-in-其中,订单是-文件解析的缓存工具链))。 – Florian