【问题标题】:How to specify source directory location in CMakeLists.txt?如何在 CMakeLists.txt 中指定源目录位置?
【发布时间】:2019-07-05 22:06:11
【问题描述】:

在我的 c++ cmake 项目中,我希望我的 CMakeLists.txt 和源文件位于不同的位置。你怎么能把它指定给cmake?我想知道这一点,因为我认为将构建文件与源文件分开是有意义的。

就我而言,这是针对跨平台项目的。我知道通常使用单个顶级 CMakeLists.txt + 条件构造来处理不同的目标/平台,但我计划为每个平台使用不同的 CMakeLists.txt 文件,并将它们远离源。像这样:

-my_project
   -sources
      -module1
         -common.hpp
         -common.cpp
         -windows
            -win_functions.cpp
            -win_functions.hpp
         -linux
            -linux_functions.cpp
            -linux_functions.hpp
      -module2 (...)
      -module3 (...)
   -build_projects
      -windows
         -CMakeLists.txt
      -linux
         -CMakeLists.txt

在我看来,这将是指定一个新的 cmake 的工作/源目录的问题,但到目前为止,我得到的壁橱是在添加源文件时添加正确的位置,如下所示:

target_sources(my_target_windows PRIVATE ${win_source_dir}/win_functions.cpp)

但问题是 Visual Studio 不会让我在以这种方式添加源文件时预览源文件,而且我似乎也无法在 Visual Studio 的 CMakeSettings.json 中解决这个问题。所以我正在为此寻找一个更内置的功能。

【问题讨论】:

  • 您正在描述您的 IDE 问题,这可能只是一个 IDE 问题。你试过建造吗?
  • “我的计划是为每个平台设置不同的 CMakeLists.txt 文件” 这正是你不应该做的。 CMake 是一个跨平台的构建工具,你应该编写你的 CMakeLists.txt 以便它们在所有平台上工作。里面可能有偶尔的条件(if/else),但90%应该不关心是哪个平台。
  • @JohnZwinck 好的,假设我的 CMakeLists 已准备好处理所有平台。不过,我想让它们远离源,以避免用构建文件污染源目录。这可能吗?
  • 当然,您可以将源文件作为相对路径引用,例如src/stuff.cpp
  • @StephenNewell,也许我的特殊问题在 IDE 中得到了解决,是的,在这种情况下,欢迎使用 IDE 解决方案。是的,我已经尝试过构建,但 VS 在解决方案资源管理器中仍然没有显示任何内容......这很痛苦。但我认为这个问题甚至超出了我的人为示例:cmake 和源文件的分离(除了在源文件中添加相对/绝对路径的前缀,如所述)

标签: c++ cmake


【解决方案1】:

好的,在 Visual Studio 中找到了解决我的问题的方法:

在解决方案资源管理器中将“解决方案和文件夹”设置为“CMake 目标视图”,它现在将正确显示添加到 cmake 项目的源和标头。

所以,在 cmake 中使用源的相对路径 + 这个 VS 功能解决了我的问题。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    相关资源
    最近更新 更多