【问题标题】:GMAKE: force prerequisite rule dependency of all c/cpp files (android NDK)GMAKE:强制所有 c/cpp 文件的先决条件规则依赖(android NDK)
【发布时间】:2013-01-08 21:54:19
【问题描述】:

如何为所有源文件 (c/cpp) 添加先决条件规则?如果整个 make 文件由我完成会很简单,但我使用的 android 构建系统对我隐藏了大部分内容。

我想这样做的原因: 我添加了一条规则来生成我的头文件,该头文件包含在一些 c/cpp 文件中。只要已经生成了依赖项,它就可以很好地工作。但是,对于一个干净的项目,在编译之前没有可用的依赖信息,因此 make 不会为一个干净的项目运行我的规则,因为它不知道某些 cpp 文件依赖于一个尚不存在的头文件.这就是为什么我需要添加某种规则来确保我的先决条件规则在任何编译发生之前运行。

到目前为止,我是这样做的:

include $(CLEAR_VARS)

.PHONY: ForceRule
MyHeader.h: ForceRule
ForceRule: CreateHeader.sh
    $(shell CreateHeader.sh MyHeader.h)

# below is standard android way to build shared lib from cpp files:
LOCAL_SRC_FILES: File1.cpp File2.cpp
LOCAL_PATH := $(CURDIR)

include $(BUILD_SHARED_LIBRARY)

【问题讨论】:

  • 这还不清楚。您是否希望所有目标文件目标都具有 MyHeader.h 作为先决条件?还是只有一部分?
  • @Beta 是的,基本上我如何强制所有编译(所有对象)依赖于规则(或头文件)。必须从 makefile 强制执行此依赖项,而不使用生成的依赖项(来自编译器)。
  • 这里有类似的问题,但在我的情况下,我使用 android buildsystem 并且我不控制编译规则,它们隐藏在里面的某个地方,所以我需要以某种方式添加该依赖项。

标签: android-ndk makefile gnu-make


【解决方案1】:

使用黑盒 makefile 很难确定(而且我认为你的方法是错误的),但你可以试试这个:

MyHeader.h: CreateHeader.sh
    $(shell CreateHeader.sh MyHeader.h)

%.o: %.cpp MyHeader.h

【讨论】:

猜你喜欢
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
相关资源
最近更新 更多