【问题标题】:CMake: Clean additional generated filesCMake:清理其他生成的文件
【发布时间】:2020-06-18 13:11:47
【问题描述】:

我正在创建一个 CMake 项目,其中我的库的链接命令会生成一个额外的 .map 文件(使用 -Wl,-Map=my-file.map GCC 选项)。

文件已正确创建,但我希望生成的 clean 任务能够像处理其他生成的文件一样正确删除该文件。

所以我试图让 CMake 意识到这个“新”文件要被清除。

看起来结合set_propertyADDITIONAL_CLEAN_FILES 是解决方案,但我无法使其正常工作。

set_property(
        DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        TARGET    my-target
        APPEND
        PROPERTY ADDITIONAL_MAKE_CLEAN_FILES my-file.map
)

请注意,我还想让 CMake 知道此文件来自 my-target 目标。这意味着只有在我清理 my-target 目标时才应该删除这个附加文件。

此外,如果将来有必要,我想将其他文件添加到此干净列表中(因此APPEND)。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    set_property 命令要求您选择一个 范围(DIRECTORYTARGET),而不是两者。由于您想将此属性应用于my-target 目标,请使用TARGET 范围。

    此外,ADDITIONAL_MAKE_CLEAN_FILES 目录属性已被弃用,不应再使用。相反,请在此处使用 ADDITIONAL_CLEAN_FILES 目标属性:

    set_property(
            TARGET my-target
            APPEND
            PROPERTY ADDITIONAL_CLEAN_FILES my-file.map
    )
    

    【讨论】:

    • 谢谢你的工作。实际上,我完全错过了以下set_property 手册部分: 第一个参数确定了设置属性的范围。它必须是以下之一:[...]。而且我不知道如何才能找到已弃用的属性而不是好的属性。
    【解决方案2】:

    您对set_property 的呼叫无效。您可以设置目录属性或目标属性,但不能同时设置。

    由于某种原因,您还使用了错误的属性名称。

    此代码应正确设置 the relevant target property 并按预期与我的 Makefile 生成器一起工作:

    set_property(
      TARGET my-target
      APPEND
      PROPERTY ADDITIONAL_CLEAN_FILES my-file.map
    )
    

    【讨论】:

    • 也谢谢你。由于您的解决方案和@squareskittles 的解决方案都是有效的,我验证了第一个,抱歉。
    猜你喜欢
    • 2015-01-30
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多