# 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 ```