当前位置:  开发笔记 > 编程语言 > 正文

如何检查makefile中是否存在文件

如何解决《如何检查makefile中是否存在文件》经验,为你挑选了2个好方法。

我有一个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,或至少适用于每个.但是,我只使用了GNU版本的make.



1> JesperE..:

使用"通配符"功能:

$(wildcard *.h)

编辑:为了匹配特定的列表,做

$(wildcard $(HEADER_FILES))

没有必要使用$(filter ...),通配符函数自动过滤不存在​​的文件.



2> m0j0..:

您没有指定要使用的编译器,但是如果可以访问gcc / g ++,则可以使用-MM选项。

我要做的是为每个.c或.cpp文件创建一个扩展名为.d的文件,然后“包含” .d文件。我在我的Makefile中使用了以下内容:

%.d: %.c
        gcc $(INCS) $(CFLAGS) -MM $< -MF $@

%.d: %.cpp
        g++ $(INCS) $(CXXFLAGS) -MM $< -MF $@

然后,我像这样创建依赖项:

C_DEPS=$(C_SRCS:.c=.d)
CPP_DEPS=$(CPP_SRCS:.cpp=.d)
DEPS=$(C_DEPS) $(CPP_DEPS)

这是在Makefile的底部:

include $(DEPS)

这是您要采取的行为吗?这种方法的优点在于,即使您使用非GNU编译器进行实际编译,GNU编译器也可以很好地计算依赖关系。

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有