天道酬勤,学无止境

CMake:在 Windows 上使用 Boost v1.69 和 MSVC(CMake: Using Boost v1.69 with MSVC on Windows)

问题

我正在尝试使用 CLion 和MinGW MSVC 在Windows上的C++项目中使用Boost库。 我在这里下载了预编译的二进制文件并将所有内容提取到C:\local\boost_1_69_0_b1_rc3 。 我设置了以下CMakeLists.txt

cmake_minimum_required(VERSION 3.11.4)
project(BoostTesting)

set(CMAKE_CXX_STANDARD 17)

set(BOOST_ROOT "C:/local/boost_1_69_0_b1_rc3")
set(BOOST_LIBRARYDIR "C:/local/boost_1_69_0_b1_rc3/lib64-msvc-14.1")
set(BOOST_INCLUDEDIR "C:/local/boost_1_69_0_b1_rc3/boost")

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_DEBUG ON)
set(Boost_DETAILED_FAILURE_MSG ON)
set(Boost_COMPILER "-vc141")
set(Boost_ARCHITECTURE "-x64")

find_package(Boost 1.69.0 COMPONENTS filesystem REQUIRED)

if (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(BoostTesting main.cpp)
    target_link_libraries(BoostTesting ${Boost_LIBRARIES})
endif ()

使用CMake的 FindBoost 调试模式( Boost_DEBUG )我得到以下输出:

C:\Users\User\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\183.4284.104\bin\cmake\win\bin\cmake.exe -DCMAKE_BUILD_TYPE=Debug "-DCMAKE_MAKE_PROGRAM=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/mingw32-make.exe" "-DCMAKE_C_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-gcc.exe" "-DCMAKE_CXX_COMPILER=C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-g++.exe" -G "CodeBlocks - MinGW Makefiles" D:\Cpp\BoostTesting
-- The C compiler identification is GNU 8.1.0
-- The CXX compiler identification is GNU 8.1.0
-- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-gcc.exe
-- Check for working C compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-gcc.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-g++.exe
-- Check for working CXX compiler: C:/Program Files/mingw-w64/x86_64-8.1.0-win32-seh-rt_v6-rev0/mingw64/bin/x86_64-w64-mingw32-g++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning (dev) at CMakeLists.txt:18 (find_package):
  Policy CMP0074 is not set: find_package uses <PackageName>_ROOT variables.
  Run "cmake --help-policy CMP0074" for policy details.  Use the cmake_policy
  command to set the policy and suppress this warning.

  Environment variable Boost_ROOT is set to:

    C:\local\boost_1_68_0\boost

  For compatibility, CMake is ignoring the variable.
This warning is for project developers.  Use -Wno-dev to suppress it.

-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1125 ] _boost_TEST_VERSIONS = 
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1127 ] Boost_USE_MULTITHREADED = ON
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1129 ] Boost_USE_STATIC_LIBS = ON
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1131 ] Boost_USE_STATIC_RUNTIME = OFF
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1133 ] Boost_ADDITIONAL_VERSIONS = 
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1135 ] Boost_NO_SYSTEM_PATHS = 
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1203 ] Declared as CMake or Environmental Variables:
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1205 ]   BOOST_ROOT = C:/local/boost_1_69_0_b1_rc3
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1207 ]   BOOST_INCLUDEDIR = C:/local/boost_1_69_0_b1_rc3/boost
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1209 ]   BOOST_LIBRARYDIR = C:/local/boost_1_69_0_b1_rc3/lib64-msvc-14.1
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1211 ] _boost_TEST_VERSIONS = 
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1286 ] Include debugging info:
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1288 ]   _boost_INCLUDE_SEARCH_DIRS = C:/local/boost_1_69_0_b1_rc3/boost;C:/local/boost_1_69_0_b1_rc3/include;C:/local/boost_1_69_0_b1_rc3;PATHS;C:/boost/include;C:/boost;/sw/local/include
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1290 ]   _boost_PATH_SUFFIXES = 
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1310 ] location of version.hpp: C:/local/boost_1_69_0_b1_rc3/boost/version.hpp
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1334 ] version.hpp reveals boost 1.69.0
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1410 ] using user-specified Boost_COMPILER = -vc141
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1430 ] _boost_MULTITHREADED = -mt
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1506 ] _boost_RELEASE_ABI_TAG = -
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1508 ] _boost_DEBUG_ABI_TAG = -d
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1571 ] _boost_LIBRARY_SEARCH_DIRS_RELEASE = C:/local/boost_1_69_0_b1_rc3/lib64-msvc-14.1;C:/local/boost_1_69_0_b1_rc3/lib;C:/local/boost_1_69_0_b1_rc3/stage/lib;C:/local/boost_1_69_0_b1_rc3/lib;C:/local/boost_1_69_0_b1_rc3/../lib;C:/local/boost_1_69_0_b1_rc3/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib_boost_LIBRARY_SEARCH_DIRS_DEBUG   = C:/local/boost_1_69_0_b1_rc3/lib64-msvc-14.1;C:/local/boost_1_69_0_b1_rc3/lib;C:/local/boost_1_69_0_b1_rc3/stage/lib;C:/local/boost_1_69_0_b1_rc3/lib;C:/local/boost_1_69_0_b1_rc3/../lib;C:/local/boost_1_69_0_b1_rc3/stage/lib;PATHS;C:/boost/lib;C:/boost;/sw/local/lib
CMake Warning at C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:847 (message):
  New Boost version may have incorrect or missing dependencies and imported
  targets
Call Stack (most recent call first):
  C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:963 (_Boost_COMPONENT_DEPENDENCIES)
  C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1622 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:18 (find_package)


CMake Warning at C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:847 (message):
  New Boost version may have incorrect or missing dependencies and imported
  targets
Call Stack (most recent call first):
  C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:963 (_Boost_COMPONENT_DEPENDENCIES)
  C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1622 (_Boost_MISSING_DEPENDENCIES)
  CMakeLists.txt:18 (find_package)


-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1760 ] Searching for FILESYSTEM_LIBRARY_RELEASE: libboost_filesystem-vc141-mt-1_69;libboost_filesystem-vc141-mt;libboost_filesystem-mt-1_69;libboost_filesystem-mt;libboost_filesystem
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1813 ] Searching for FILESYSTEM_LIBRARY_DEBUG: libboost_filesystem-vc141-mt-d-1_69;libboost_filesystem-vc141-mt-d;libboost_filesystem-mt-d-1_69;libboost_filesystem-mt-d;libboost_filesystem-mt;libboost_filesystem
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1760 ] Searching for SYSTEM_LIBRARY_RELEASE: libboost_system-vc141-mt-1_69;libboost_system-vc141-mt;libboost_system-mt-1_69;libboost_system-mt;libboost_system
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1813 ] Searching for SYSTEM_LIBRARY_DEBUG: libboost_system-vc141-mt-d-1_69;libboost_system-vc141-mt-d;libboost_system-mt-d-1_69;libboost_system-mt-d;libboost_system-mt;libboost_system
-- [ C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:1887 ] Boost_FOUND = 1
CMake Error at C:/Users/User/AppData/Local/JetBrains/Toolbox/apps/CLion/ch-0/183.4284.104/bin/cmake/win/share/cmake-3.12/Modules/FindBoost.cmake:2048 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.69.0

  Boost include path: C:/local/boost_1_69_0_b1_rc3

  Could not find the following static Boost libraries:

          boost_filesystem

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Call Stack (most recent call first):
  CMakeLists.txt:18 (find_package)


-- Configuring incomplete, errors occurred!
See also "D:/Cpp/BoostTesting/cmake-build-debug/CMakeFiles/CMakeOutput.log".

[Failed to reload]

CMake正在寻找那些特定的文件,但我注意到-x64指示不是搜索文件名的一部分。 我的目录只包含64-bit库:

为什么忽略Boost_ARCHITECTURE环境变量? 我希望它将缺少的-x64添加到搜索的文件名中。 如果我手动重命名libboost_filesystem-vc141-mt*.lib文件,它们可以通过CMake找到。 但是,如果我编译并链接我的简单main.cpp ,我会收到链接器错误:

====================[ Build | BoostTesting | Debug ]============================
C:\Users\User\AppData\Local\JetBrains\Toolbox\apps\CLion\ch-0\183.4284.104\bin\cmake\win\bin\cmake.exe --build D:\Cpp\BoostTesting\cmake-build-debug --target BoostTesting -- -j 4
Scanning dependencies of target BoostTesting
[ 50%] Building CXX object CMakeFiles/BoostTesting.dir/main.cpp.obj
[100%] Linking CXX executable BoostTesting.exe
CMakeFiles\BoostTesting.dir/objects.a(main.cpp.obj): In function `boost::filesystem::path_traits::convert(char const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&)':
C:/local/boost_1_69_0_b1_rc3/boost/filesystem/path.hpp:997: undefined reference to `boost::filesystem::path::codecvt()'
C:/local/boost_1_69_0_b1_rc3/boost/filesystem/path.hpp:997: undefined reference to `boost::filesystem::path_traits::convert(char const*, char const*, std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >&, std::codecvt<wchar_t, char, int> const&)'
CMakeFiles\BoostTesting.dir/objects.a(main.cpp.obj): In function `boost::filesystem::file_size(boost::filesystem::path const&)':
C:/local/boost_1_69_0_b1_rc3/boost/filesystem/operations.hpp:616: undefined reference to `boost::filesystem::detail::file_size(boost::filesystem::path const&, boost::system::error_code*)'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[3]: *** [CMakeFiles\BoostTesting.dir\build.make:88: BoostTesting.exe] Error 1
mingw32-make.exe[2]: *** [CMakeFiles\Makefile2:72: CMakeFiles/BoostTesting.dir/all] Error 2
mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:84: CMakeFiles/BoostTesting.dir/rule] Error 2
mingw32-make.exe: *** [Makefile:117: BoostTesting] Error 2

main.cpp源代码:

#include <iostream>
#include <boost/filesystem.hpp>

using namespace boost::filesystem;

int main(int argc, char *argv[]) {
    if (argc < 2) {
        std::cout << "Usage: tut1 path\n";
        return 1;
    }
    std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
    return 0;
}

我很确定重命名文件不是正确的做法。 但即使这样也行不通。 我做错了什么,您如何在像这样的简单C++项目中正确使用Boost

回答1

我相信find_package(Boost ...)在您的情况下失败了,因为它无法找到 64 位REQUIRED所需的filesystem库。

确保您也有 GCC 版本的 Boost,因为现在您只显示 V++ 库。

回答2
  1. 你收到了 CMake 警告

    新的 Boost 版本可能具有不正确或缺少的依赖项和导入的目标

    因为那个 CMake 版本没有为 boost 1.69 做好准备(也许最新的 CMake 会......)。 所以 CMake 会尽力识别该版本,所以它仍然可以工作(见下面的第 3 点)。

  2. @Felix Natter 在上面正确指出Boost_ARCHITECTURE仅从 CMake 3.13 处理。

  3. 如果您使用命名为“布局”的文件之一重建您的提升,您的 CMake 可以识别,您可以在没有手动重命名、没有 GCC 或 MINGW的情况下使其工作。 (从您的调试日志中,这些:

    libboost_<module name>-<toolset>[-mt]-<ABI tag>-<boost version>
    libboost_<module name>-<toolset>[-mt]-<ABI tag>
    libboost_<module name>[-mt]-<ABI tag>-<boost version>
    libboost_<module name>[-mt]
    libboost_<module name>

    不幸的是,只有system布局匹配,这意味着您需要在不同的“lib”文件夹中分离 Debug 和 Release 构建。 有关“布局”参数的说明,请参见此处。

    因此,通过指定--layout=system参数来重建 boost,并通过指定variant=debugvariant=release来决定变体。

    作为起点,您可以在 SF 上找到构建日志文件:https://sourceforge.net/projects/boost/files/boost-binaries/1.69.0/boost_1_69_0-64bitlog.txt/download
    文件中的最后一个构建“条目”用于 vc141,这是您的版本:
    b2 -j%NUMBER_OF_PROCESSORS% --without-mpi --build-type=complete toolset=msvc-14.1 address-model=64 architecture=x86 --prefix=.\ --libdir=lib64-msvc-14.1 --includedir=garbage_headers install

    转到您的 boost 源根目录并首先执行> bootstrap 。 确保检测到 msvc-14.1。

    现在构建:
    > b2 -a -j%NUMBER_OF_PROCESSORS% --without-mpi --with-filesystem toolset=msvc-14.1 address-model=64 architecture=x86 variant=debug --layout=system --prefix=C:\boost_build\debug

    在不同的目标目录中为 Release 执行此操作。 根据您的需要更改--prefix 。 如果默认值不适合您,您也可以指定--libdir--includedir 。 当然,您可能需要修改您的 CMakeList 文件,以便它可以同时使用 Debug 和 Release 变体...

所以最好是使用 CMake 版本,它可以识别 boost 版本 1.69,和/或获取基于 CMake 的 boost 版本,其中包括 1.69。

回答3
set(Boost_ARCHITECTURE "-x64")

仅适用于 cmake >= 3.13 [1] [2]。 如果您无法升级到 cmake 3.13+,您可以解决:

set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID, "x64")

(不确定在什么条件下会自动设置)

[1] https://cmake.org/cmake/help/v3.12/module/FindBoost.html [2] https://cmake.org/cmake/help/v3.13/module/FindBoost.html

回答4

事实证明,当使用带有内置 Boost 的 MinGW 发行版时,它可以工作。

CMakeLists.txt

cmake_minimum_required(VERSION 3.11.4)
project(BoostTesting)

set(CMAKE_CXX_STANDARD 17)

if(WIN32)
    set(BOOST_ROOT "C:/MinGW")
endif ()

find_package(Boost 1.67.0 COMPONENTS filesystem REQUIRED)

if (Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(BoostTesting main.cpp)
    target_link_libraries(BoostTesting ${Boost_LIBRARIES})
endif ()

main.cpp输出:

D:\Cpp\BoostTesting\cmake-build-debug\BoostTesting.exe
Usage: tut1 path

Process finished with exit code 1

它编译并链接成功。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • CMake: Using Boost v1.69 with MSVC on Windows
    I'm trying to use the Boost library in my C++ project on Windows using CLion and MinGWMSVC. I downloaded the precompiled binaries here and extracted everything to C:\local\boost_1_69_0_b1_rc3. I setup the following CMakeLists.txt: cmake_minimum_required(VERSION 3.11.4) project(BoostTesting) set(CMAKE_CXX_STANDARD 17) set(BOOST_ROOT "C:/local/boost_1_69_0_b1_rc3") set(BOOST_LIBRARYDIR "C:/local/boost_1_69_0_b1_rc3/lib64-msvc-14.1") set(BOOST_INCLUDEDIR "C:/local/boost_1_69_0_b1_rc3/boost") set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) set(Boost
  • 将 FindBoost CMAKE 指向 boost_python Windows 10,VS 2017(Point FindBoost CMAKE to boost_python Windows 10, VS 2017)
    问题 我的高级目标是使用 Visual Studio 2017 在 Windows 10 上安装需要 boost for python 的 BGSlibrary。我使用 cmake 3.9.0 从源代码编译了 opencv 和 boost (1.64.0)。 在 BGSLIBRARY 的 cmake 期间,我得到 $ cmake -DBGS_PYTHON_SUPPORT=ON -DBOOST_ROOT="C:/Program Files/boost_1_64_0/" .. -- BGSLIBRARY WITH PYTHON SUPPORT: ON -- OpenCV library status: -- version: 3.3.0 CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.9/ Modules/FindBoost.cmake:1877 (message): Unable to find the requested Boost libraries. Boost version: 1.64.0 Boost include path: C:/Program Files/boost_1_64_0 Could not find the following Boost libraries: boost_python
  • 是否可以使用CMake构建Boost? [关闭](Is it possible to build Boost with CMake? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 6年前关闭。 改善这个问题 与其将静态库包含在交叉编译的项目的源代码树中,我不希望将boost直接添加到cmake中并进行构建。 这可以吗? 回答1 在我的工作场所中,我们也为此付出了很多努力。 虽然我当然不能声称知道“最佳”方法,但是我可以根据自己的经验提出以下想法。 我们最初只是要求开发人员单独安装boost,然后让CMake以find_package(Boost ...)调用的形式进行常规检查。 这很容易,但不是自动化的,并且对于已经安装了较早版本的boost的开发人员造成了问题。 然后,我们改变了策略,并添加了一份增强资源的副本,这些副本是从您上面提到的一个项目中克隆的。 我不记得具体细节,但我认为它是Ryppl项目目前正在研究的细节的先驱。 重点是它已经支持CMake。 boost库是通过add_library调用添加的实际CMake目标,这使它们更易于在CMake代码中使用。 虽然这通过自动化在我们的项目中使用boost解决了以前的问题,但最终成为维护的噩梦。 我们从中克隆的boost项目从根本上进行了更改,现在非常依赖Ryppl特定的CMake函数。 我们不想将Ryppl添加为依赖项,因此我们再次改变了策略!
  • Visual Studio 2017、Boost 和 CMake 的版本号(Version numbers for Visual Studio 2017, Boost and CMake)
    问题 From the Boost mailing list I understand that VS2017 has the following version numbers that we would probably be most interested in: Visual Studio 15.0 cl; C/C++ Compiler 19.10 Platform Toolset: v141 The following macros are defined in the Visual Studio 2017 IDE: CrtSDKReferenceVersion 14.0 MSBuildToolsVersion 15.0 PlatformToolsetVersion 141 VCToolsVersion 14.10.25017 VisualStudioVersion 15.0 During compilation the following variables are #define'd: _MSC_VER 1910 _MSC_FULL_VER 191025017 cl.exe is contained within an MSVC folder with the VC tools version. The complete x64 folder path is C
  • 构建 Boost BCP(Building Boost BCP)
    问题 过去两个小时我一直在尝试构建 Boost C++ 库,但没有任何结果就停止了。 由于我是 C++ 的新手,因此无法正确构建。 如何使用 Visual Studio 2008 正确构建它? 我需要使用 BCP 工具来提取库的子集。 所以我需要先建立BCP,对吗? 这该怎么做? 当我尝试构建它时,出现以下错误 致命错误 LNK1104:无法打开文件“libboost_filesystem-vc90-mt-gd-1_37.lib”。 我在哪里可以获得上述给定的库文件? 回答1 首先,您需要在命令 shell 中拥有正确的 PATH、INCLUDE 和 LIB 环境变量。 为此,请使用参数调用文件“ vcvarsall.bat ”(或类似文件): vcvarsall.bat x86 接下来你必须构建 bjam(你也可以从 Boost 页面下载它,但它几乎一样快)。 转到 Boost 中的tools\jam\src文件夹并键入: build.bat 它应该产生一个子文件夹bin.ntx86包含bjam.exe。 为方便起见,将其复制到 Boost 主文件夹。 接下来,您可以构建 bcp。 进入tools\bcp文件夹并键入: ..\..\bjam.exe --toolset=msvc 回到 Boost 主文件夹,您可以构建您想要的任何库: bjam toolset=msvc –
  • 如何解决与在 Windows 10 上安装 dlib 相关的问题?(How to solve issue related to installation of dlib on Windows 10?)
    问题 我正在尝试在 Windows 10 上为 python 3.7 的面部识别安装 dlib,我探索了几种方法,但我遇到了错误。我尝试了以下步骤 - 使用“pip install cmake”安装 cmake。 这奏效了。 从 Python Package Index 下载 Dlib 源(.tar.gz):https://pypi.org/project/dlib/#files 解压并进入文件夹。 运行安装:python setup.py install 我得到低于错误。 * *C:\Program Files\dlib-19.18.0>python setup.py install running install running bdist_egg running egg_info writing dlib.egg-info\PKG-INFO writing dependency_links to dlib.egg-info\dependency_links.txt writing top-level names to dlib.egg-info\top_level.txt package init file 'dlib\__init__.py' not found (or not a regular file) reading manifest file 'dlib.egg
  • find_package()在Windows Cmake上未检测到增强(find_package() doesn't detect boost on Windows Cmake)
    问题 我正在使用Windows系统。 我想通过CMake使用Boost库。 我已经在C:\ boost_1_55_0 \上安装了Boost,这是我的CMakeLists.txt文件 set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) find_package(Boost 1.55.0 COMPONENTS thread) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) LINK_DIRECTORIES(${Boost_LIBRARY_DIRS}) add_executable (linking_with_boost main.cc sqr.cc) target_link_libraries(linking_with_boost ${Boost_LIBRARIES}) else() message(STATUS "Fail asdasd!") endif() 我得到-找不到Boost输出: $ cmake ../ -- Could NOT find Boost -- Fail asdasd! -- Configuring done -- Generating done --
  • 未正确找到带有 Boost 库的 CMake Windows 10 库(CMake with Boost library Windows 10 Library not found correctly)
    问题 像许多其他人一样,我在 Windows 中使用 boost 库时遇到了问题。 在 Ubuntu 16.04 上,它与 libboost-all-dev 一起工作得很好,但在 Windows 上我有很多问题。 我尝试构建一个cryptonote应用程序,我可以在linux下完全编译而没有任何错误。 但我还需要 Windows 二进制文件,所以我执行了安装以下工具的步骤: Visual Studio 2013 (vc120) CMake 3.10.1 蟒蛇 3.6.4 提升 1.58 为了提升,我做了以下步骤: 从二进制安装 boost 运行 bootstrap.bat 运行 b2 安装运行 bjam install "--with-some-libs" 什么都行不通。 加密货币向我抛出一个错误,即无法找到某些但并非所有库。 我试图设置 BOOST_ROOT、BOOST_LIBRARY_DIRS、BOOST_INCLUDE_DIRS -> 无。 我做错了什么? 我从 cmake 得到的错误是这样的: -- Building for: Visual Studio 12 2013 -- The C compiler identification is MSVC 18.0.31101.0 -- The CXX compiler identification is MSVC 18.0
  • 用cmake在win10配置colmap
    目录 写在前面1、直接使用colmap2、自己编译 准备tipsqtCGALceres colmapvisual studio 参考及感谢完 写在前面 1、直接使用colmap 如果是想直接是使用colmap windows版本,可直接在github下载: https://github.com/colmap/colmap/releases 最上面的版本是最新版 如果有NVIDIA的显卡并且配置了cuda,可以选cuda版本 如果没有的话,下载no-cuda版本就好。 下载之后解压,运行COLMAP.bat就可以使用了 使用方法:简易COLMAP使用教程 2、自己编译 以下内容针对想自己编译,并可以在运行时调试、查看源码的同学,这样能帮助理重建的每一步是怎么实现的,文中会尽量描述每个资源的版本、来源、配置方法,如果是没有用cmake配置过项目的同学,可以直接使用笔者使用的版本。 本文中参考、使用的博客、网页、资源均已给出链接: colmap官网 colmap的github windows10进行Colmap配置 boost库下载地址 Windows环境下配置Ceres(含Eigen、gflags、glog、merit、suitesparse) CGAL安装 CGAL 5.0的安装、编译和配置(VS2017) 准备 下载cmakehttps://cmake.org/download/
  • 便携式 C++ 构建系统 [关闭](Portable C++ build system [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 5年前关闭。 改进这个问题 我正在为 C++ 项目寻找一个良好且易于维护的便携式构建系统。 主要平台应包括Windows(Visual Studio 8+)和Linux(gcc); Cygwin 可能是一个优势。 我们正在考虑两种主要的可能性: CMake和Boost.Jam 。 SCons 也可以是一种选择,但我还没有研究过。 CMake 和 Boost.Jam 似乎具有以下特点: CMake: (+) 生成本机“makefile”(Windows 解决方案,Eclipse 项目) (+) 用于测试和打包的扩展 (-) 要求在每个项目文件夹中都有一个配置文件 (-) 基于有点过于冗长的特殊语言 Boost.Jam: 无需中间步骤即可自行构建 (-) 不生成本地解决方案/项目 (+) 类似于经典 makefile 的简洁语言 (+) 对多线程和静态/动态库等属性的直观支持 什么是其他可能性,什么是经验后真正可取的? 哪些构建系统可以在途中创建解决方案? 回答1 (-) 要求在每个项目文件夹中都有一个配置文件 这是不正确的,您只需要传递更大的路径,例如: add_program(foo src/foo.cpp src
  • 在 Windows 中将 Boost 与 CMake 和 Visual Studio 链接的正确方法是什么?(Whats the proper way to link Boost with CMake and Visual Studio in Windows?)
    问题 我正在尝试为 Visual Studio 2012 生成一些我需要的 Boost 1.58 库(计时、正则表达式和线程),并将这些库与 CMake 链接。 根据我设置的配置,我在 CMake 和 Visual Studio 查找或链接库时遇到了真正的问题。 我终于使用了以下配置: bjam.exe --link=static --threading multi --variant=调试阶段 但这似乎不会生成静态库。 我应该如何生成库并使用 CMake 搜索它们以便 Visual Studio 正确链接它们? 回答1 我终于想出了解决方案,我认为它足够详细,可以成为通用答案。 Visual Studio 搜索动态库,因此我们需要将 Boost 库编译为共享、多线程、调试和发布以及运行时链接共享。 在使用 bjam.exe 的 Windows 中,除了链接之外,所有命令都有前缀“--”,因此构建库的正确方法是: bjam.exe link=shared --threading=multi --variant=debug --variant=release --with-chrono --with-regex --with-thread stage 这将在文件夹 Boost/stage/lib 中生成库和 DLL,因此我们需要设置一个环境变量 Boost_LIBRARY_DIR C
  • Mongo-C-Driver及Mongo-CXX-Driver的编译及使用
    Mongo-C-Driver及Mongo-CXX-Driver的编译及使用 前言Windows环境Mongo-C-Driver版本信息Cmake-GUICmake 控制台命令 Mongo-CXX-Driver版本信息Cmake 控制台命令 前言 本人属于CMake小白,如有不足还望各位大神斧正. Linux 下使用 Cmake与 Windows下使用控制台命令大致相同,可自行研究 Mongo-C-Driver : 可以使用Cmake命令行及Cmake-GUI进行编译 Mongo-CXX-Driver : 可以使用Cmake命令行进行编译,Cmake-GUI会报无法找到bson库,添加路径以后依然无法生成工程,还希望大神指点迷津 Linux Windows 环境 Widows : win10 VS : 2017 Cmake-GUI : 3.18.1 Python : 3.6.6 Boost : 1.72.0 Mongo-C-Drive: 1.17.1 Mongo-CXX-Driver: 3.6.0 Mongo-C-Driver 版本信息 git: https://github.com/mongodb/mongo-c-driver tar:http://mongoc.org/ Cmake-GUI Where is th source code: 填写CMakeLists
  • cmake v3.15.3 cannot find boost v1.71.0
    I am trying to build from source the following software in Windows 10: https://github.com/FreeOpcUa/freeopcua. I have also installed the latest version of the boost libraries (boost_1_71_0) but when I try to use CMake for compiling the source code, CMake cannot find the location of boost. Environment: Windows 10 CMake version: 3.15.3 boost version: 1.71.0 I have downloaded the latest version of boost from this link: https://dl.bintray.com/boostorg/release/1.71.0/source/boost_1_71_0.zip I have extracted the content. Inside the extracted folder I have executed: .\bootstrap.bat After bootstrap
  • CMake - 使用 /MT 而不是 /MD 编译(CMake - compile with /MT instead of /MD)
    问题 我是 cmake (2.8.12.1) 的新手,我在 Windows 上使用它来生成项目文件以使用 Visual Studio 2012 构建 cpp-netlib。 默认情况下,它使用 /MDd 编译器开关进行编译。 我想更改它以便它使用 /MTd。 我遵循了此处给出的建议 https://stackoverflow.com/a/14172871,但它对我不起作用。 具体来说,我将 if 语句中显示的第二行添加到 CmakeLists.txt。 if (MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") endif() 当我打开 Visual Studio sln 文件时,我可以看到 /MDd 选项仍然设置。 此外,我在 CMakeCache.txt 中看到以下内容: //Flags used by the compiler during debug builds. CMAKE_CXX_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1 我也试过像这样从头开始设置标志: set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
  • CMake没有找到Boost(CMake is not finding Boost)
    问题 我正在尝试安装CGAL。 他们在第6.1节中描述安装过程非常简单。 当我运行cmake-gui并单击configure ,将得到以下输出: CMake Error at D:/program files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1192 (message): Unable to find the requested Boost libraries. Boost version: 1.51.0 Boost include path: D:/program files/boost_1_51 The following Boost libraries could not be found: boost_thread boost_system No Boost libraries were found. You may need to set BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT to the location of Boost. Call Stack (most recent call first): cmake/modules/CGAL_SetupBoost.cmake:6 (find
  • windows下编译colmap3.6[colmap][gmp][mfpr]
    编译colmap 1 前期准备 1 github上下载colmap稳定版源码: https://github.com/colmap/colmap/archive/refs/tags/3.6.zip 之后解压进入,执行: git init 2 确保编译环境 1 确保你的vs不是vs2019 16.9.3以及以上,否则会有奇怪的cuda错误, 解决方案是: 1.1 将vs2019卸载1.2 去https://docs.microsoft.com/en-us/visualstudio/releases/2019/history#installing-an-earlier-release下载vs2019 16.8.5,然后安装v140,v141的生成工具 2 如果本篇博客所有内容都详细读完,任然无法成功编译colmap,那就装VS2015,然后用他的生成工具(cmake -G 参数指定编译器版本,命令行里输入cmake -G),项目打开还是可以用vs2019的。 然后将编译器加入环境变量: C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023\bin\HostX64\x64 输入cl能看到输出即可. 2 依赖安装 2.1 boost 直接安装(推荐下载vs2015版本
  • cmake FindBoost not finding Boost libraries when building with MinGW on Windows
    qtcreator supports both qmake and cmake for cross platform development and qmake works fine for both msvc and MinGW builds on Windows. However, I'd prefer to support just one tool: cmake. The CMakeLists.txt at via-httplib works fine on linux and when using cmake to build msvc on Windows. However, when using cmake to build MinGW on Windows, I get the following error: CMake Error at C:/Program Files/CMake/share/cmake-3.13/Modules/FindBoost.cmake:2100 (message): Unable to find the requested Boost libraries. Boost version: 1.69.0 Boost include path: D:/DevLibraries/boost/boost_1_69_0 Could not
  • 无法在 cmake 中找到 Boost(unable to find Boost in cmake)
    问题 我正在使用 cmake 构建一个 PCL 项目。 我在一个安装程序中使用了 PCL。然后 boost 路径是C:/Program Files/PCL 1.5.1/3rdParty/Boost. 请在我的 cmake 调试版本下面找到。感谢任何帮助。 [ C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:615 ] BOOST_ROOT = C:/Program Files/PCL 1.5.1/3rdParty/Boost [ C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:617 ] BOOST_INCLUDEDIR = [ C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:619 ] BOOST_LIBRARYDIR = [ C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:621 ] _boost_TEST_VERSIONS = 1.47;1.47.0;1.59.0;1.59;1.58.0;1.58;1.57.0;1.57
  • Windows上Boost.Python 1.54(debug build)对Python27.lib的令人困惑的依赖(Puzzling dependency of Boost.Python 1.54 (debug build) to Python27.lib on Windows)
    问题 我一定在犯一些明显的错误,但经过数小时的战斗,我无法取得进一步的进步: 升级(从稍早次要版本所有三个)升压1.54,CMake的2.8.12和Python 2.7.5后,我的项目不再链接调试配置的Python绑定(它们在发布链接罚款)。 我正在使用VS 2012进行构建。更新之前,一切正常。 我以标准方式构建Boost: bootstrap.bat其后是b2 address-model=64 toolset=msvc-11.0 。 我的系统安装了Python 2.7,由b2进行安装: notice: [python-cfg] Configuring python... notice: [python-cfg] Registry indicates Python 2.7 installed at "C:\Python27\" notice: [python-cfg] Checking interpreter command "python"... notice: [python-cfg] running command 'DIR /-C /A:S "C:\Python27\python.exe" 2>&1' notice: [python-cfg] running command 'python -c "from sys import *; print('version=%d
  • CMake 没有找到提升(CMake doesn't find boost)
    问题 Windows 7. 64 位。 CMake 2.8.10。 脚步: 下载提升:http://sourceforge.net/projects/boost/files/boost/1.51.0/ 把它放到C:\work\lib\boost_1_51_0-MT 打开“开始->所有程序->Microsoft Visual Studio 2010->Visual Studio 工具->Visual Studio 命令提示符(2010)” 命令: cd C:\work\lib\boost_1_51_0-MT bootstrap.bat bjam --toolset=msvc-10.0 --variant=release --build-type=complete -j 4 --with-regex --with-test --with-filesystem --with-date_time --with-random --with-system --with-thread --with-program_options --with-chrono --with-math stage link=static threading=multi runtime-link=static 命令: set BOOST_ROOT=C:\work\lib\boost_1_51_0-MT cmake M