我正在使用<div class="wrapper">
<div class="elem">elem that I'd like to select</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
</div>
<div class="wrapper">
<div class="elem">Unfortunately, this elem is selected too</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
<div class="elem">elem</div>
</div>
生成一些文件。 add_custom_command()
将其删除。其中一个文件旨在作为默认/示例实现,由用户修改。仅当它不存在时才生成。我希望ninja clean
不要删除此文件。
我尝试了很多事情,但没有成功:
ninja clean
:除非我在add_custom_target()
中命名,否则CMake会抱怨丢失的文件,但是这样做也会导致干净删除BYPRODUCTS
不起作用,因为CMake抱怨文件丢失。set_file_properties(... GENERATED FALSE)
以类似的方式失败:“文件夹不存在或尚未处理”(确实存在)我以前生成了示例实现,只是让用户复制它或在其上建模代码。这可行,但并不完全令人满意。我的用例不太可能导致CMake不支持吗?
答案 0 :(得分:2)
恐怕您的要求(从概念上讲,让make
创建make clean
不会删除的内容) 很不寻常。我可以想到两个潜在的解决方案/解决方法。
一个,将文件的生成时间移至CMake时间。也就是说,使用execute_process()
而不是add_custom_command()
创建它。基于文件生成过程(当前的自定义命令)是否取决于构建的其余部分,这可能可行,也可能无法。
两个,完全从CMake隐藏示例文件的存在。也就是说,让custom命令还生成其他文件(也许只是一个时间戳文件),并使其驱动自定义目标依赖于该文件。不要在自定义命令的依赖项,输出或副产品出现时列出示例文件。这样,任何东西都不会依赖它,CMake和Ninja都不应该在乎它是否存在,因此他们不会抱怨或尝试清理它。
答案 1 :(得分:0)
如果它是用户的示例,则它不应位于您的build文件夹中,而应位于install文件夹中。我不明白为什么您需要使用add_custom_command
或列出的其他命令。
因此,您必须提供install()指令。
然后,您可以呼叫make install
。清洁不会删除这些文件,并且仅在必要时重新安装才会覆盖它们。