小编Nik*_*ola的帖子

Makefile排除文件

我正在创建一个GNU Makefile,我有一个以下问题:

我有一个需要从源列表中排除的排除文件(和目录)列表.现在,从列表中删除列出的文件并不是一个大问题.我只是做以下事情:

NEWSRC := $(shell find $(SOURCEDIR) -name '*.c')
EXCLUDES := $(shell cat ./$(TARGET12)_exclude.txt) #TARGET12 is a Makefile parameter
CSRC := $(filter-out $(EXCLUDES),$(NEWSRC))

问题是EXCLUDES包含目录(而不是文件名),同时也应排除同一目录下的所有文件名.例如,如果EXCLUDES变量的一个成员是../sources/filesystem/SomePath,那么该目录下的所有文件也应该从CSRC中排除.例如,这些文件可能是:

../sources/filesystem/SomePath/something.c
../sources/filesystem/SomePath/src/something.c
../sources/filesystem/SomePath/Some1/src/something.c

你知道如何在Makefile中解决这个问题吗?

先感谢您!

makefile substring file

7
推荐指数
1
解决办法
1万
查看次数

Makefile ifeq问题

我试图在我的规则模式中使用ifeq并且我遇到了问题.这是我遇到麻烦的规则:

$(OBJS): $(OBJDIR)/%.o : ../%.c
    @mkdir -p $(dir $@)
    ifeq(mcc.exe,$(CC))
        o_file:=$(shell echo $@ | sed -e 's/\/cygdrive\///' | sed -e 's/\([a-zA-Z]\)/\1:/')
        $(CC) $(CFLAGS) $< -o $(o_file)
    else
        $(CC) $(CFLAGS) $< -o $@
    endif
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我得到:

"/bin/sh: -c: line 0: syntax error near unexpected token `mcc.exe,mcc.exe'
/bin/sh: -c: line 0: `ifeq(mcc.exe,mcc.exe)'"
Run Code Online (Sandbox Code Playgroud)

但是,当我不使用indention时,我得到:"Makefile:77:*缺少分隔符.停止."

我在Cygwin上使用GNU make 3.81.ifeq的整个问题来自于我有两个工具链的相同Makefile,其中一个(mcc.exe)无法处理/cygdrive/c/.../something路径,但应该有c: /.../something路径.如果您知道其他任何解决方法,我也将非常感激!

先感谢您!

cygwin makefile path

7
推荐指数
1
解决办法
7184
查看次数

标签 统计

makefile ×2

cygwin ×1

file ×1

path ×1

substring ×1