【发布时间】:2020-12-18 13:08:56
【问题描述】:
我有一个非常简单的 CMake 文件,它在 linux 上运行良好,但在 windows 上,它说它找不到 boost(即使它似乎找到它,因为它说“找到合适的版本”)。这是初始构建文件:
cmake_minimum_required(VERSION 3.16.3)
project(filecompare)
set(CMAKE_CXX_STANDARD 20)
find_package(Boost 1.73.0 COMPONENTS program_options)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(filecompare filecompare.cpp)
target_link_libraries(filecompare ${Boost_LIBRARIES})
endif()
CMake 输出:
-- Could NOT find Boost (missing: Boost_INCLUDE_DIR program_options) (Required is at least version "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug
所以它似乎无法自行找到库,所以我在 find_package 上方添加了这些行:
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/local/boost_1_73_0")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/local/boost_1_73_0/lib64-msvc-14.2")
现在它似乎找到了库,但没有,这是输出:
-- Could NOT find Boost (missing: program_options) (found suitable version "1.73.0", minimum required is "1.73.0")
-- Configuring done
-- Generating done
-- Build files have been written to: C:/repos/filecompare/cmake-build-debug
我尝试设置如下内容:
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
SET(BOOST_ROOT "C:/local/boost_1_73_0/boost")
但这也无济于事。那么我在这里做错了什么?我在带有 VisualStudio 2019 的 CLion 上使用 clang-cl
【问题讨论】:
-
您使用的是什么 CMake 版本? 3.16.3?然后,您的 CMake 版本不知道 Boost 版本 1.73.0,您应该尝试在您的
find_package(Boost ...)调用之前添加set( Boost_ADDITIONAL_VERSIONS 1.73.0 1.73)。在重新运行 CMake 之前,不要忘记删除 build 目录中的 CMakeCache.txt 文件。 -
@vre:这并没有解决它。我尝试添加这个,删除我的构建目录。还是一样的输出。我使用的 CMake 版本是 3.17.3。
-
在
find_package(Boost)之前添加set(Boost_DEBUG ON)并再次运行配置。其输出将包含信息实际 Boost 库,这些库被搜索和搜索位置。然后将此信息与您在 Boost 安装中的文件进行比较。 -
仅供参考:如果您将
REQUIRED关键字添加到find_package调用,则如果未找到 Boost,CMake 将自动终止。所以你可以省略对Boost_FOUND变量的检查。 -
@Tsyvarev Boost_DEBUG 帮助:似乎它尝试了不同的库名称:搜索 PROGRAM_OPTIONS_LIBRARY_RELEASE: boost_program_options-clangw10-mt-x64-1_73;boost_program_options-clangw10-mt-x64;boost_program_options-clangw10-mt; boost_program_options-vc6-mt-x64-1_73;boost_program_options-vc6-mt-x64;boost_program_options-vc6-mt;boost_program_options-mt-x64-1_73;boost_program_options-mt-x64;boost_program_options-mt;boost_program_options-mt;boost_program_options 我的版本里面都有vc142。如何获取名称中包含 vc6 或 clangw10 的库版本?