第二个MAKEFILE

Makefile实战案例
本文介绍了一个具体的Makefile配置实例,详细展示了如何通过Makefile来管理项目的编译过程,包括目标文件的生成、依赖关系的处理及清理操作等。通过本例,读者可以了解到Makefile的基本语法和使用技巧。

#PATH=./path

OBJ := first.o printft1.o 

OBJ +=printft2.o test.h 

test=$(filter %.o,$(OBJ))

#bar:=$(test:.o=.c)

bar:=$(foreach n, $(test), $(n:.o=.c))

 

all:$(OBJ)

gcc -lpthread -o test $(test)

 ifeq ($(origin MAKE),default)

@echo "来自MAKEFILE定义"

 endif 

$(test): 

@gcc -MM $(bar)

gcc -c  $(bar)

 

.PHONY:clean

  clean:

rm *.o test

Nano-ESG数据资源库的构建基于2023年初至2024年秋季期间采集的逾84万条新闻文本,从中系统提炼出企业环境、社会及治理维度的信息。其构建流程首先依据特定术语在德语与英语新闻平台上检索,初步锁定与德国DAX 40成分股企业相关联的报道。随后借助嵌入技术对文本段落执行去重操作,以降低内容冗余。继而采用GLiNER这一跨语言零样本实体识别系统,排除与目标企业无关的文档。在此基础上,通过GPT-3.5与GPT-4o等大规模语言模型对文本进行双重筛选:一方面判定其与ESG议题的相关性,另一方面生成简明的内容概要。最终环节由GPT-4o模型完成,它对每篇文献进行ESG情感倾向(正面、中性或负面)的判定,并标注所涉及的ESG具体维度,从而形成具备时序特征的ESG情感与维度标注数据集。 该数据集适用于多类企业可持续性研究,例如ESG情感趋势分析、ESG维度细分类别研究,以及企业可持续性事件的时序演变追踪。研究者可利用数据集内提供的新闻摘要、情感标签与维度分类,深入考察企业在不同时期的环境、社会及治理表现。此外,借助Bertopic等主题建模方法,能够从数据中识别出与企业相关的核心ESG议题,并观察这些议题随时间的演进轨迹。该资源以其开放获取特性与连续的时间覆盖,为探究企业可持续性表现的动态变化提供了系统化的数据基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
这是一个非常典型的 OpenWrt 软件包构建问题。你执行了两个 `Makefile`,其中第一个(`tp-miniupnpc`)没有生成 `libminiupnpc.so`,而第二个(`libtpsocket`)成功生成了共享库文件(如 `libtpsocket.so`)。我们来详细分析可能的原因。 --- ## ✅ **问题分析** ### 1. 第一个 Makefile(`tp-miniupnpc`)未生成 `.so` 文件的原因 #### (1)**没有定义 `Build/Compile` 步骤** - OpenWrt 的构建系统默认会使用 `Build/Compile` 步骤来调用 `make` 编译源码。 - 如果你没有在 `Makefile` 中定义 `Build/Compile`,OpenWrt 将不会自动编译 `.so` 文件。 - 在你提供的第一个 `Makefile` 中,只有 `Build/Prepare` 和 `Build/InstallDev`,但没有 `Build/Compile`,这意味着: - 源码被复制到了构建目录; - 但没有调用 `make` 去真正编译出 `.so` 文件; - 所以 `$(PKG_INSTALL_DIR)/usr/lib/libminiupnpc.so.*` 并不存在。 #### (2)**没有指定 `PKG_BUILD_PARALLEL:=1` 或 `MAKE` 命令** - 如果你没有告诉 OpenWrt 使用哪个 `make` 命令来编译,或者源码目录中没有提供 `Makefile` 或编译规则,OpenWrt 不会自动编译 `.so`。 - 你需要显式地定义 `Build/Compile` 阶段来调用 `make`,例如: ```makefile define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ CC="$(TARGET_CC)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ libminiupnpc.so endef ``` #### (3)**依赖的 Makefile 没有生成 `.so`** - 如果你复制的 `src/` 目录中没有能生成 `.so` 的编译规则,或者原生的 `miniupnpc` 项目默认只生成静态库 `.a`,那么即使你调用了 `make`,也不会生成 `.so` 文件。 --- ### 2. 第二个 Makefile(`libtpsocket`)生成了 `.so` 文件的原因 #### (1)**有明确的 `Build/Compile` 步骤(虽然未在你提供的代码中显示)** - 虽然你提供的 `Makefile` 中没有显式定义 `Build/Compile`,但根据你执行结果来看,它确实成功生成了 `libtpsocket.so`。 - 这说明源码目录中可能自带了一个能生成 `.so` 的 `Makefile`,或者你项目中的 `src/` 目录中有一个能生成 `.so` 的构建系统。 - OpenWrt 默认会调用 `make`,如果 `src/` 目录下的 `Makefile` 有生成 `.so` 的规则,就能成功生成。 #### (2)**在 `Package/$(PKG_NAME)/install` 中显式安装了 `.so` 文件** - 它明确调用了: ```makefile $(INSTALL_BIN) $(PKG_BUILD_DIR)/libtpsocket.so $(1)/usr/lib/ ``` 这说明 `libtpsocket.so` 在构建目录中确实存在。 --- ## ✅ **解决方案(针对第一个 Makefile)** ### ✅ 方法 1:添加 `Build/Compile` 步骤来生成 `.so` ```makefile define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) \ CC="$(TARGET_CC)" \ CFLAGS="$(TARGET_CFLAGS)" \ LDFLAGS="$(TARGET_LDFLAGS)" \ libminiupnpc.so endef ``` 你需要确保 `src/` 目录中的 `Makefile` 支持生成 `.so` 文件。 ### ✅ 方法 2:检查源码是否支持共享库构建 - 检查 `src/` 中是否有生成 `.so` 的规则。 - 如果没有,你可能需要手动编写 `Makefile` 或修改源码支持生成 `.so`。 - 或者你可以使用 `gcc -shared` 手动生成 `.so`,例如: ```makefile define Build/Compile $(TARGET_CC) -shared -fPIC -o $(PKG_BUILD_DIR)/libminiupnpc.so \ $(PKG_BUILD_DIR)/*.c endef ``` ### ✅ 方法 3:确认是否在 `Build/InstallDev` 中使用了正确的路径 确保: ```makefile $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.{so*,a} $(1)/usr/lib/ ``` 和 ```makefile $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/lib/libminiupnpc.so.* $(1)/usr/lib/ ``` 这些路径中的 `.so` 文件确实存在。 --- ## ✅ **总结对比** | 特性 | 第一个 Makefile(`tp-miniupnpc`) | 第二个 Makefile(`libtpsocket`) | |------|-----------------------------|----------------------------| | 是否定义 `Build/Compile` | ❌ 没有 | ✅ 可能有 | | 源码是否支持 `.so` 构建 | ❓ 未知 | ✅ 支持 | | 是否正确安装 `.so` 文件 | ❌ 路径中没有 | ✅ 成功安装 | | 是否调用 `make` 编译 | ❌ 未定义 | ✅ 有调用 | --- ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值