为什么 cygwin 将当前项目路径添加为 cmake include 路径的前缀

问题描述 投票:0回答:1

最近学习 C++ 后,我在 CMake 项目中使用 Boost 时遇到了挑战。我在 CMakeLists.txt 文件中进行了一些配置,但没有收到来自 CMake 的任何错误。但是,我不断遇到错误,指出当我包含“boost/lexical_cast.hpp”时找不到“boost/lexical_cast.hpp”文件。

以下是一些可能有助于解决我的问题的信息。

我使用的是CLion 2023.3.3,工具链如下。

我向 CMake 添加了一个选项以便找到 Boost。

这是我的 CMakeLists.txt。

cmake_minimum_required(VERSION 3.25)
project(cpp_demo)

set(CMAKE_CXX_STANDARD 17)

find_package(Boost CONFIG REQUIRED)
if (NOT Boost_FOUND)
    message(FATAL_ERROR "Boost library not found")
endif ()
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
message("Boost version " ${Boost_VERSION})
message(${Boost_INCLUDE_DIRS})
add_executable(lexcast cpp-primer-plus/sample/chapter-18/lexcast.cpp)
#target_include_directories(lexcast PRIVATE ${Boost_INCLUDE_DIRS})

CMake 输出如下。

当我尝试执行代码时,输出表明它在

${Boost_INCLUDE_DIRS}
宏的值之前添加了当前项目的路径。

我不知道问题是由CMake还是Cygwin引起的,谁能帮我解决这个问题。

希望能够正常包含Boost头文件。

c++ cmake boost cygwin clion
1个回答
0
投票

我不使用 Clion,但这似乎是混合 Cygwin 和 Windows PATH 的经典案例。

Cygwin Boost 库的最新版本是 1.66
https://cygwin.com/packages/x86_64/libboost-devel/libboost-devel-1.66.0-1

如果您安装了该软件包,其标题位于

/usr/include/boost/
libboost-devel

所以编译器的调用应该有

-I/usr/include/boost

CygWin CMAKE 无法将 Windows PATH 理解为

C:\
,它期望 POSIX 路径为
/usr/include/boost/

© www.soinside.com 2019 - 2024. All rights reserved.