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