解决VS2022 CMake项目的WSL Ubuntu中的头文件问题

roqulrg3  于 2023-02-08  发布在  其他
关注(0)|答案(1)|浏览(444)

头文件包含VS2022和CMake的WSL Ubuntu中的问题

问题

我使用的是Visual Studio 2022,当我尝试在WSL Ubuntu上包含"GLFW/glfw3.h"时,我得到了一个源文件不存在的错误。然而,相同的代码在Windows上可以完美地工作。(这是所有其他库也有问题,但我只是以glfw为例)

当前代码

cmake_minimum_required (VERSION 3.8)

project ("test project")

include(FetchContent)

FetchContent_Declare(
    glfw
    GIT_REPOSITORY https://github.com/glfw/glfw.git
    GIT_TAG 3.3.8
)

FetchContent_GetProperties(glfw)
if(NOT glfw_POPULATED)
    FetchContent_Populate(glfw)

    set(GLFW_BUILD_EXAMPLES OFF)
    set(GLFW_BUILD_TESTS OFF)
    set(GLFW_BUILD_DOCS OFF)
    set(GLFW_INSTALL OFF)

    add_subdirectory(${glfw_SOURCE_DIR} ${glfw_BINARY_DIR})
endif()

add_executable(test_exe "main.cpp")

target_link_libraries(test_exe PRIVATE glfw)

我找到了一个变通方法,将FETCHCONTENT_BASE_DIR更改为项目的源目录,但这会带来更多问题。例如,在Windows和WSL Ubuntu之间切换需要删除从Windows获取的文件,否则会导致错误:

The current CMakeCache.txt directory /home/olli/.vs/Omerta/external/glfw/glfw-subbuild/CMakeCache.txt is different than the directory c:/Users/Olli/source/repos/GitOlli/Omerta/external/glfw/glfw-subbuild where CMakeCache.txt was created.

我也试过显式指定include目录,但也不起作用。

target_include_directories(test_exe PRIVATE "${CMAKE_BINARY_DIR}/_deps/glfw-src/include")
ej83mcc0

ej83mcc01#

解决方法是删除“out”和“.vs”文件夹,将CMakePresets.json替换为CMakeSettings.json,然后重新启动计算机。

相关问题