如何检查文件是否存在于生成文件
我有一个makefile模板来编译单个DLL(用于插件系统)。 用户的makefile文件看起来是这样的:如何检查文件是否存在于生成文件
EXTRA_SRCS=file1 file2
include makefile.in
在makefile.in
我:
plugin.dll: plugin.os $(patsubst %,%.os,$(EXTRA_SRCS))
哪里plugin.os
是主要的C++文件进行编译。顺便说一句,结尾的文件是.os
是编译为共享库的目标文件(使用即-fpic
选项与gcc
)
现在的问题是,额外的资源将可能(但不是必须)头文件。理想情况下,我想将它们添加为目标plugin.os
和file.cpp
的依存关系,但仅限于它们存在。
该方法应该适用于Windows和Linux,或者至少适用于每个。但是,我只使用make的GNU版本。
使用 “通配符” 功能:
$(wildcard *.h)
编辑:以匹配特定的列表,请
$(wildcard $(HEADER_FILES))
没有必要使用$(过滤器...)通配符函数会自动过滤不存在的文件。
您没有指定您正在使用的编译器,但是如果您有权访问gcc/g ++,则可以使用-MM选项。
我所做的是为每个.c或.cpp文件创建一个扩展名为.d的文件,然后“包含”.d文件。我用这样的事情在我的Makefile:
%.d: %.c
gcc $(INCS) $(CFLAGS) -MM $< -MF [email protected]
%.d: %.cpp
g++ $(INCS) $(CXXFLAGS) -MM $< -MF [email protected]
我然后创建依赖这样的:
C_DEPS=$(C_SRCS:.c=.d)
CPP_DEPS=$(CPP_SRCS:.cpp=.d)
DEPS=$(C_DEPS) $(CPP_DEPS)
,这在Makefile的底部:
include $(DEPS)
是这个你要去做什么样的行为?这种方法的优点在于,即使您使用非GNU编译器进行实际编译,GNU编译器也可以很好地计算依赖关系。
我宁愿避免makeflie一代......但谢谢! – PierreBdR 2008-10-30 16:48:19
是否简单
$(filter $(wildcard *.h),$(HEADER_FILES))
你想要做什么?
这不是我想要的...我有一个特定的.h文件列表来测试... – PierreBdR 2008-10-30 14:50:32
没关系,你不需要使用通配符。使用$(通配符$(HEADER_FILES)) – JesperE 2008-10-31 11:11:14