CMake中禁止搜索系统安装的Boost

这个问题主要发生在Linux下:有时需要在编译项目时使用自己编译的Boost库(如需要特定的Boost版本或者使用非默认的编译器)。

CMakeLists.txt中如果调用了find_package(Boost),则CMake会优先在系统目录中搜索Boost,一旦搜到了一个,就不会继续寻找,即使设置了BOOST_ROOT变量也不行。

解决办法是在CMake第一次运行的时候(如果当前目录下已经运行过并且找到了错误的Boost,则需要删除所有文件重新操作),设置一个BOOL量Boost_NO_SYSTEM_PATHS=TRUE,再设置BOOST_ROOT,则CMake会优先从BOOST_ROOT设置的位置搜索Boost,问题解决。

Boost_NO_SYSTEM_PATHS  
    Set to TRUE to suppress searching in system paths (or other locations outside of BOOST_ROOT or BOOST_INCLUDEDIR).
    Useful when specifying BOOST_ROOT. Defaults to OFF.
    [Since CMake 2.8.3]

补充:如果是自己编译的Boost并且经过了“安装”这一步,则BOOST_ROOT下可能没有CMake相关文件,此时还需要设置Boost_NO_BOOST_CMAKE变量为True,告诉CMake此处没有相关文件,直接拿目录去找吧。

一个命令行示例:

cmake -DCMAKE_INSTALL_PREFIX=$TARGET \
    -DBoost_NO_BOOST_CMAKE=TRUE \
    -DBoost_NO_SYSTEM_PATHS=TRUE \
    -DBOOST_ROOT:PATHNAME=$TARGET \
    -DBoost_LIBRARY_DIRS:FILEPATH=${TARGET}/lib
  • 最后更改: 2019/05/27 13:23