为什么cmake会忽略Boost_NO_BOOST_CMAKE环境变量?

时间:2016-03-02 14:32:14

标签: 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。任何提示?

更新

添加

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

2 个答案:

答案 0 :(得分:0)

创建包含以下内容的PreLoad.cmake文件最终适用于我:

set(Boost_NO_BOOST_CMAKE TRUE CACHE BOOL "" FORCE)

感谢Florian的帮助。

答案 1 :(得分:0)

我有一个非常相似的问题,但是原因和解决方法不同。

在我的情况下,CMake忽略了Boost_NO_BOOST_CMAKE,因为我使用了find_package中的full signature,其中使用了配置模式。

这不起作用:

set(Boost_NO_BOOST_CMAKE ON)
find_package(BOOST_LIB 1.66 NAMES Boost REQUIRED)  # full signature

这确实有效:

set(Boost_NO_BOOST_CMAKE ON)
find_package(Boost 1.66 REQUIRED)  # basic signature