【发布时间】: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 和源文件的分离(除了在源文件中添加相对/绝对路径的前缀,如所述)