如何取消 CMake 属性设置?

3

概述

我希望在CMake中取消设置一个(布尔)属性,以便get_property(... SET)返回0,即使该属性已经被设置。将属性设置为0FALSEOFF是不够的。如何实现呢?

背景

我有一些自定义命令,生成一些源文件。 CMake会自动将GENERATED源文件属性分配给它们。这似乎使GNU Makefile生成器添加了一条规则,使用make clean删除这些文件。

然而,我不希望这些文件被清除,因为一旦它们存在,就有可能被用户编辑。自定义命令只应确保它们在不存在时成为生成的文件。使用execute_process而不是自定义命令在配置时间生成它们是不可行的。

GENERATED设置为0FALSEOFF并不能排除这些源文件被清理。

版本

  • 操作系统:Ubuntu 16.04
  • CMake:3.5.1(来自Ubuntu 16.04存储库)

我目前使用的是Ubuntu 16.04,如果可能的话,应避免让所有用户使用更新版本的CMake。

1个回答

5
你需要将它设置为nothing:
# test unsetting a property
set_property(TARGET Properties PROPERTY TARGETTEST)
get_property(TARGETRESULT TARGET Properties PROPERTY TARGETTEST SET)
if (TARGETRESULT)
    message(SEND_ERROR "Error: target prop not unset, "
            "result is TARGETRESULT=${TARGETRESULT}")
endif ()

(来源于https://github.com/Kitware/CMake/blob/master/Tests/Properties/CMakeLists.txt


谢谢,这正是我在寻找的。我错过了set_property文档中所有值都标记为可选的事实。也许应该更明确地表达出来。 - bjhend

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接