2016-03-02 49 views
1

对我好下面的命令作品:为什么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): 

我已经试过也设置为TRUEBOOL: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工作。

+0

如果我查看['FindBoost.cmake'](https://github.com/Kitware/CMake/blob/master/Modules/FindBoost.cmake#L231)源代码,则此检查不适用于环境变量,但是对于'Boost_NO_BOOST_CMAKE'只有CMake变量。你可以给一个参考为什么这应该与一个环境变量?你的第一个'-D'调用似乎是有效的解决方案。 – Florian

+0

@Florian:事实上,我不能,我是cmake的新手,并认为它会自动考虑所有内部变量的环境变量。我的第一个'-D'调用是一个有效的解决方案,但不幸的是,它需要我改变一些构建脚本作为Git项目的一部分。在我的'.bashrc'中设置一个环境变量将是一个更加优雅的解决方案。 –

+0

可以在我的答案[这里](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

回答

0

创建PreLoad.cmake文件包含以下内容终于为我工作:

set(Boost_NO_BOOST_CMAKE TRUE CACHE BOOL "" FORCE) 

感谢弗洛里安的帮助。

+0

不客气。我忘了提到'PreLoad.cmake'的范围。由于它不包含在主'CMakeLists.txt'中,而是加载到主'CMakeLists.txt'之前,因此'PreLoad.cmake'中设置的所有变量都必须是缓存变量 - 如果它们也应该在主CMakeLists中可见.txt'。 – Florian