cmake找不到boost库,因为它查找错误的文件名

Nit*_*mer 2 c++ windows boost cmake boost-build

我根据文档在windows(8.1)机器上构建了boost(1.56)库,包括共享库和静态库.
所有这些都以BOOST_ROOT/stage/lib以下文件名格式出现在目录中:

boost_thread-vc120-mt-1_56.dll
boost_thread-vc120-mt-1_56.lib
boost_thread-vc120-mt-gd-1_56.dll
boost_thread-vc120-mt-gd-1_56.lib
Run Code Online (Sandbox Code Playgroud)

(这只是线程lib,所有其他库也使用相同的格式)

当我运行cmake时,它抱怨无法找到boost库.
运行它-DBoost_DEBUG=ON表明它查找不同的文件名:

libboost_thread-vc120-mt-s-1_56;
libboost_thread-vc120-mt-s;
libboost_thread-mt-s-1_56;
libboost_thread-mt-s;
libboost_thread
Run Code Online (Sandbox Code Playgroud)

我注意到以下差异:

  • 实际文件的前缀是boost而不是libboostcmake正在搜索的前缀
  • 实际文件的静态版本只有不同的文件扩展名(.lib而不是.dll)但是cmake正在寻找 -mt-s

知道我怎么能让cmake找到实际文件而不重命名我必须匹配cmake的搜索格式的文件?

谢谢

Igo*_* R. 7

注:boost_thread-vc120-mt-1_56.lib是一个导入库允许与动态链接boost_thread-vc120-mt-1_56.dll,同时libboost_thread-vc120-mt-s-1_56是一个静态库(s信意味着它也与静态CRT链接).

您尝试构建的应用程序需要静态CRT的静态Boost库,因此您应该提供它们.要构建此类库,请b2使用适当的参数进行调用:

b2 variant=release link=static runtime-link=static stage
Run Code Online (Sandbox Code Playgroud)