c-makefile:当宏发生更改时,代码不会重新编译



我有两个生成文件:a.mkb.mk。就上下文而言,我有一个项目,它共享一些应用程序级别的代码,但也有一些独立的特定于平台的代码。这两个makefile针对不同的平台进行编译。每个makefile都用一组宏编译我的C项目的一些子集。例如,给定包含foo.c bar.c baz.c qux.c的文件夹,生成文件a.mk可能使用宏-DHAS_FOO=1编译foo.c baz.c qux.c,生成文件b.mk可能使用宏-DHAS_FOO=0编译bar.c baz.c qux.c。源文件有一些代码块,这些代码块根据定义执行操作:

#if HAS_FOO
// call some function defined in foo.c
#endif

我注意到,在a.mk之后使用b.mk构建时,共享的依赖项baz.cqux.c不会重新编译,尽管不同的宏集会导致代码发生更改,从而导致未定义的引用错误。我能做些什么来解决这个问题?我经常想为这两个平台构建,在运行每个目标之前必须使用clean并不理想。

如果我需要提供更具体的信息,请告诉我。

正如伊曼纽尔所评论的那样;制造";只是考虑了文件,确切地说是它们的修改时间。它不知道对不同定义的任何依赖性。将Makefile视为创建静态依赖树的规则集。每个文件中只能有一个实例。

最直接的方法是分别为每个目标构建。您可以通过分离的构建目录或对象文件的不同文件名来实现这一点。

最新更新