我有两个生成文件:a.mk
和b.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.c
和qux.c
不会重新编译,尽管不同的宏集会导致代码发生更改,从而导致未定义的引用错误。我能做些什么来解决这个问题?我经常想为这两个平台构建,在运行每个目标之前必须使用clean
并不理想。
如果我需要提供更具体的信息,请告诉我。
最直接的方法是分别为每个目标构建。您可以通过分离的构建目录或对象文件的不同文件名来实现这一点。