【问题标题】:How to prevent CMake adding CMakeLists.txt at root of generated project?如何防止 CMake 在生成项目的根目录添加 CMakeLists.txt?
【发布时间】:2019-11-22 05:55:33
【问题描述】:

我有以下CMakeLists.txt

cmake_minimum_required(VERSION 3.15.5)

project(REminiscence VERSION 0.4.5)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

configure_file(REminiscenceConfig.h.in REminiscenceConfig.h)

add_definitions(-DUSE_MODPLUG -DUSE_STATIC_SCALER -DUSE_TREMOR -DUSE_ZLIB)

set_property(GLOBAL PROPERTY USE_FOLDERS ON)

set(RE_SRC
    "collision.cpp"
    "cpc_player.cpp"
    "cutscene.cpp"
    "decode_mac.cpp"
    "dynlib.cpp"
    "file.cpp"
    "fs.cpp"
    "game.cpp"
    "graphics.cpp"
    "main.cpp"
    "menu.cpp"
    "mixer.cpp"
    "mod_player.cpp"
    "ogg_player.cpp"
    "piege.cpp"
    "protection.cpp"
    "resource.cpp"
    "resource_aba.cpp"
    "resource_mac.cpp"
    "scaler.cpp"
    "screenshot.cpp"
    "seq_player.cpp"
    "sfx_player.cpp"
    "staticres.cpp"
    "systemstub_sdl.cpp"
    "unpack.cpp"
    "util.cpp"
    "video.cpp"
)

source_group("Sources" FILES ${RE_SRC})

set(RE_INC
    "cpc_player.h"
    "cutscene.h"
    "decode_mac.h"
    "dynlib.h"
    "file.h"
    "fs.h"
    "game.h"
    "graphics.h"
    "intern.h"
    "menu.h"
    "mixer.h"
    "mod_player.h"
    "ogg_player.h"
    "resource.h"
    "resource_aba.h"
    "resource_mac.h"
    "scaler.h"
    "screenshot.h"
    "seq_player.h"
    "sfx_player.h"
    "systemstub.h"
    "unpack.h"
    "util.h"
    "video.h"
)

source_group("Headers" FILES ${RE_INC})

add_executable(REminiscence ${RE_SRC} ${RE_INC})

find_package(SDL2 CONFIG REQUIRED)
target_link_libraries(REminiscence PRIVATE SDL2::SDL2 SDL2::SDL2main)

find_package(ZLIB REQUIRED)
target_link_libraries(REminiscence PRIVATE ZLIB::ZLIB)

target_include_directories(REminiscence PUBLIC
    "${PROJECT_BINARY_DIR}"
)

当我生成 Visual Studio 解决方案时,它还将CMakeLists.txt 放在根目录:

问题

如果可能,如何防止 CMake 在根目录添加 CMakeLists.txt

【问题讨论】:

  • 你为什么关心这个?它将CMakeLists.txt 作为依赖项添加到项目中。如果您修改它,MSBuild 会运行 cmake . 来更新项目。它还允许在 Visual Studio 中轻松编辑它。
  • 实际上只是学习 CMake ...
  • 好点,谢谢。如果需要,请添加答案,我会接受。

标签: c++ visual-studio cmake


【解决方案1】:

您不能从项目中删除 CMakeLists.txt,这是设计使然。

cmakeCMakeLists.txt 作为依赖项添加到项目中。如果即使在外部编辑器中修改它,MSBuild 也会运行 cmake . 来更新项目。您无需手动运行cmake .cmake --build,当您选择构建解决方案时,Visual Studio 会为您完成。

此外,如果CMakeLists.txt 在项目中,您可以直接在 Visual Studio 中轻松编辑。

【讨论】:

    【解决方案2】:

    旁注:如果您希望 CMakeLists.txt 条目出现在项目根目录之外的另一个“文件夹”中,只需将 "CMakeLists.txt" 条目添加到相应的 source_group 变量中。 CMakeLists.txt 仍然是一个依赖项,但会列在 Visual Studio 中选择的文件夹下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多