【问题标题】:Using CMAKE how to stop the "Debug" and "Release" subdirectories使用 CMAKE 如何停止“Debug”和“Release”子目录
【发布时间】:2018-04-20 21:59:19
【问题描述】:

我已经指定了我的二进制输出目录:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

不幸的是,Visual Studio 添加了DebugRelease 目录。

我不想要这些。

documentation for CMAKE 说:

多配置生成器(VS、Xcode)将每个配置的子目录附加到指定目录,除非使用生成器表达式。

但我不确定这到底是什么意思。

如何让 Visual Studio添加这些目录?

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案1】:

    要直接回答您的问题:按照文档的建议,使用生成器表达式。这是一个例子:

    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $<1:${CMAKE_SOURCE_DIR}/bin>)
    

    $&lt;1:xxx&gt; 是一个扩展为xxx 的基因,这意味着最终值将是您想要的。

    但是,请注意,这意味着在构建时,来自当前构建配置的二进制文件将覆盖来自先前构建的二进制文件,即使这是不同的配置。你确定要那个吗?


    附带说明,您指定的路径是相对于 source 目录的。这听起来也很不寻常,而且很容易导致问题。例如,如果您从同一个源(到不同的二进制目录)生成多个构建系统,则它们中的.exe 文件都将存储在同一位置,最后一个构建的文件会覆盖之前的所有文件。这听起来像是一罐实实在在的蠕虫和未来维护的噩梦。

    虽然我不知道您的设置细节,但我敦促您重新考虑将构建工件存储在源代码树中。

    【讨论】:

    • 很好的答案。 debugrelease 目录的问题在于,当前在 linux 上 make 不会创建相同的目录。我正在尝试使两个平台上的最终二进制输出目录相同,因此任何相对路径都是相同的。
    • @Startec 然后我建议将它们添加到单配置生成器中,而不是从多配置生成器中删除它们。
    • 当你说that path you've specified is relative to the source directory 我认为CMAKE_SOURCE_DIR 源目录,但在我的项目的最顶层(即根目录)?
    • @Startec 是的,这就是我说它不寻常的原因。您通常会将二进制文件放在 binary 目录 (CMAKE_BINARY_DIR) 中,而不是源文件中。
    • @Startec 源目录是顶级CMakeLists.txt 所在的位置。二进制目录是您生成构建系统的位置(例如顶级.sln 文件)。所有构建工件通常都应该进入二进制目录,这样您就可以根据需要从一个源目录生成任意数量的构建系统(= 二进制目录),并且您只需删除二进制目录即可轻松擦除整个构建系统。跨度>
    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多