【问题标题】:CMake project structure with Visual Studio使用 Visual Studio 的 CMake 项目结构
【发布时间】:2022-01-03 03:07:28
【问题描述】:

我已经在这玩了好几个小时了,我很迷茫。这就是我的项目结构的样子,非常基本。

Project
    - CMakeLists.txt
    - src
        - main.cpp
        - class.cpp
        - anotherClass.cpp
    - include
        - class.h
        - anotherClass.h

我的 CMakeLists.txt 看起来像这样:

cmake_minimum_required(VERSION 3.22.1)

project(Project)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})

file(GLOB_RECURSE HEADERS "include/*.h")
file(GLOB SOURCES "src/*.cpp")

include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
    
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})

target_link_directories(${PROJECT_NAME} PRIVATE include)

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

当我在“过滤器视图”或其他任何名称中构建 Visual Studio 项目时,所有头文件都显示在“头文件”下,所有源文件都显示在“源文件”下。没关系,但问题是我的实际文件夹结构不存在。所有源文件和头文件都捆绑在一起,看起来不太好。如何使构建具有上述项目结构?

【问题讨论】:

  • 文件结构不正是你上面描述的吗?
  • 我希望 CMake 构建一个具有该结构的 VS 项目。如果我在 VS 中打开解决方案,所有文件都捆绑在一起
  • 但是你的结构的标题和正文是分开的,这就是你在 Visual Studio 中得到的,对吧?也许我看错了……
  • 添加您当前项目结构的屏幕截图,以明确您使用的是什么结构。

标签: c++ cmake build project


【解决方案1】:

注意:我假设“过滤视图”是指“解决方案资源管理器”。

USE_FOLDERS property 只是确定是否应将目标分组到 Visual Studio 解决方案资源管理器中的文件夹中,即使您激活它,您仍然需要使用 CMAKE_FOLDER 变量或 FOLDER 目标属性来指定目标的文件夹。

如果您希望源文件显示在目录结构中,您需要使用source_group command 来完成此操作。

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}
    FILES ${HEADERS} ${SOURCES}
)

不需要设置USE_FOLDERS 属性即可。


无关注释:

target_link_directories(${PROJECT_NAME} PRIVATE include)

在这种情况下是错误的,即使它在这里没有破坏任何东西:target_link_directories 用于指定链接器查找库的目录,include 目录中没有库文件;此外,如果可能的话,我会尽量避免指定链接目录。


include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

最好在每个目标的基础上指定此类信息:

target_include_directories(${PROJECT_NAME} PRIVATE include)

【讨论】:

    猜你喜欢
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多