c - 生成文件项目
问题描述
我想知道是否有一种方法可以从特定目录自动添加源文件而不将它们写入 Makefile.am 。因此,如果存在,我需要一个选项。感谢帮助。
解决方案
我想知道是否有一种方法可以从特定目录自动添加源文件而不将它们写入 Makefile.am 。
一些make
实现,例如 GNU,具有解决此目标的功能,但是没有可移植的机制,并且 Autotools 都是关于可移植性的。因此,依靠这种机制将是糟糕的 Autotools 风格。
即使您满足于忽略可移植性影响,这仍然是有限的,因为将Makefile.am
源文件与它们贡献的目标相关联。您需要在有问题的源目录和目标之间存在直接链接,或者可能在更具体的文件名模式和目标之间存在直接链接。有时存在这样的关联,但有时不存在。
撇开可移植性问题不谈,总的来说,我不太喜欢这种东西,因为它是一个陷阱。例如,如果您采用这种机制,那么很难在不破坏构建的情况下添加源文件。在对现有项目进行自动工具时添加所有源名称的一次性成本并不是那么糟糕——我已经为几个大型项目做过——而且在Makefile.am
添加源时维护你的成本是微不足道的。
但是,如果您仍然想要这些方面的东西,那么我建议您使用源生成器。它可能看起来像这样:
Makefile.am
bin_PROGRAMS = myprog
include myprog_sources.am
generate_myprog_sources.sh
#!/bin/bash
myprog_sources=(src/myprog/*.c)
echo "myprog_SOURCES = ${myprog_sources[*]}" > myprog_sources.am
它使用一个单独的 shell 脚本来生成 Automake 代码,用于_SOURCES
命名.c
指定目录(即src/myprog
)中所有文件的定义。myprog_sources.am
为简单和安全起见,这已写入其自己的文件 ,并且该Makefile.am
文件使用 Automakeinclude
指令来合并它。当您想针对不同的源文件补充调整构建时,您可以运行该脚本。您还可以通过手动更新源列表来临时更改源列表,而无需运行脚本。
这不是您要求的免提自动化级别,但它仍然非常自动化,并且更适合您正在使用的工具。
推荐阅读
- microservices - NestJS 网关无法接收来自微服务的消息?
- python - 来自networkx的MultiDiGraph边缘使用connectionStyle绘制
- vb.net - 从 VB6 ActiveX 调用 VB.NET COM 类库不起作用
- postgresql - docker entrypoint.sh 脚本中的 psql 登录问题
- amazon-web-services - 使用 Amazon EventBridge 在组织内发布和接收跨账户事件
- hibernate - JPA 正确定位和打包元模型
- jquery - node.js + mysql + ejs 数据插入后无需重新加载页面即可更新屏幕信息
- keras - TypeError: `Conv2D` 只能接受 2 个位置参数('filters'、'kernel_size'),但您传递了以下位置参数:
- google-apps-script - 通过公式中的索引引用另一个 Google 工作表
- google-sheets - 如果单元格包含“下一小时”(当前小时+ 1)的值,如何有条件地将单元格格式化为某种颜色?