问题描述
将软件包移植到OpenWrt时,如何使安装的软件包头文件在$(STAGING_DIR)中更有条理
通常,头文件会使用指定的文件名和保留的文件夹构造函数一一安装到usr/include
。
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/a
$(INSTALL_DIR) $(1)/usr/include/b
$(INSTALL_DIR) $(1)/usr/include/c
$(CP) $(PKG_BUILD_DIR)/common.h $(1)/usr/include/
$(CP) $(PKG_BUILD_DIR)/a/a.h $(1)/usr/include/a/
$(CP) $(PKG_BUILD_DIR)/b/b.h $(1)/usr/include/b/
$(CP) $(PKG_BUILD_DIR)/c/c.h $(1)/usr/include/c/
endef
define Build/clean
rm $(1)/usr/include/a/a.h
rm $(1)/usr/include/b/b.h
#blablabla...
endef
使用此方法:
- 如果软件包本身使用另一个头文件(c.h)更新,则必须再次编辑Makefile。
- 也在
Build/Clean
部分中w删除软件包时。 - 当
a.h
被丢弃在软件包中时,该文件仍将保留在$(STAGING_DIR)
目录中,直到您手动将其删除为止。
然后,发生了一些变化:
- 将标头文件安装到
usr/include/$(PKG_NAME)
而不是usr/include
中以进行更多的组织。 - 使用
find and copy
,我们可以使用一个公共目录安装/删除所有头文件,而无需再次编辑。
define Build/InstallDev
$(INSTALL_DIR) $(1)/usr/include/$(PKG_NAME)
pushd $(PKG_BUILD_DIR) && \
find ./ -name '*.h' -exec cp --parents $(1)/usr/include/$(PKG_NAME) \; &&\
popd
endef
define Build/clean
$(RM) $(1)/usr/include/$(PKG_NAME) //install and remove header files with one command
endef
通过此更改,另一个依赖于此程序包的包必须将这些头文件的GCC标志-I
路径指定为“ TARGET_CFLAGS”。
define Package/test
DEPENDS:= +base
endef
// is there a way to let it automatically add this path to cflags?
TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include/base
有时TARGET_CFLAGS不会传递到Makefile包中,为此我必须做很多改变。
**这不是问题,更像是头脑风暴。 **
我想知道其他人通常会做些什么来使头文件更井井有条,并使清理功能更强大。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)