cmake - 如何保留 CMake 生成的文件?
问题描述
我add_custom_command()
用来生成一些文件。ninja clean
删除它们,因为它应该。其中一个文件旨在作为默认/示例实现,由用户修改。只有在它不存在时才会生成它。我不想ninja clean
删除这个文件。
我尝试了很多事情但没有成功:
add_custom_target()
:CMake 抱怨丢失的文件,除非我将其命名BYPRODUCTS
为set_file_properties(... GENERATED FALSE)
不起作用,因为 CMake 抱怨文件丢失。set_directory_properties()
以类似的方式失败:“文件夹不存在或尚未处理”(它确实存在)
我之前生成了示例实现,只是让用户复制它或在上面建模他们的代码。这有效,但并不完全令人满意。我的用例是否不太可能 CMake 不支持它?
解决方案
恐怕您的要求(从概念上讲,已经make
创建了make clean
不会删除的东西)是相当不寻常的。我可以想到两种潜在的解决方案/解决方法。
一、将文件的生成移到CMake的时候。也就是说,使用execute_process()
而不是创建它add_custom_command()
。这可能会也可能不会,这取决于文件生成过程(当前的自定义命令)是否依赖于构建的其余部分。
二,从 CMake 中完全隐藏示例文件的存在。也就是说,让自定义命令也生成一些其他文件(可能只是一个时间戳文件),并让它的驱动自定义目标依赖于那个文件。不要将示例文件列为自定义命令的依赖项、输出或副产品。这样,什么都不会依赖它,CMake 和 Ninja 都不应该关心它是否存在,所以他们不会抱怨或尝试清理它。
推荐阅读
- github - 使用 github 并发布我自己的 Play 商店应用程序
- r - 用于预览csv的R readr函数
- windows-mixed-reality - 在 HMD 上显示之前修改渲染帧(即过滤器)?
- android - 根据状态更改按钮背景颜色 - ColorStateList
- javascript - 在功能组件中更改列表项焦点颜色 onClick
- javascript - 如何在多维数组中循环以使用扩展运算符捕获最后一个节点
- python - 车辆路线问题 - 如何完成/确定何时访问某些位置?
- android - 无法使用 jetpack Compose 获得测试结果,(始终显示为已取消)
- javascript - 在javascript中映射大型数组而不会导致浏览器崩溃
- android - Firebase Recycler Paging Adapter 复制最后一项