我需要将为gmake构建的makefile转换为可以通过cygwin“make”命令执行的makefile。
GMAKE代码如下:
OBJ := ${SOURCES:%.c=%.o}
%.o: %.c
$(CC) -c -o $@ $< $(CFLAGS) $(DEFINES)
$(LIBNAME).lib: $(OBJ)
$(AR) rcs $@ $(OBJ)
clean:
del $(OBJ)
del *.out
我在Cygwin makefile中使用了以下语句。如果它复制了上面的gmake语句或者我遗漏了什么,请你确认一下。任何输入都会有所帮助。
Cygwin“make”:
OBJ := ${SOURCES:%.c=%.o}
%.obj: %.c
$(CC) -c -o `cygpath -w $@` `cygpath -w $<` $(CFLAGS) $(DEFINES)
.DEFAULT_GOAL := ${LIBNAME}.lib
${LIBNAME}.lib: $(OBJS)
$(SILENCE)echo -e "Archive: ${LIBNAME}.lib\n"
$(SILENCE)$(AR) $(ARFLAGS) `cygpath -w $@` ${OBJS}}
clean:
rm $(OBJ)
rm *.out
非常感谢。
答案 0 :(得分:0)
正如@matzeri所指出的,cygwin make 是 gnu make。 这就是我使用它的原因。 第一个makefile对我来说很好。
如果您的所有文件都使用相对路径,那么一切都应该没问题。
甚至Microsoft编译器也可以构建subdir/file.cpp
并将对象粘贴到objdir/file.o
(cl subdir/file.cpp -o objdir/file.o
)。
提示:努力在文件名中使用正斜杠。总是
你可能遇到的唯一困难是绝对路径,
通常出现在包含路径中。
/usr/local/include
只对cygwin程序有意义。
cl.exe
希望将此转换为C:/cygwin64/usr/local/include
。
不要使用反斜杠,除非命令确实确实需要它。 那么一个问题是 bash 解释反斜杠, 因此,您必须以某种方式引用文件名以防止这种情况发生。
objdir/1.o: /usr/local/src/1.cpp
some-odd-compiler "$$(cygpath -wa $<)" -o "$$(cygpath -w $@)"
如果使用正斜杠(cygpath -ma
),则不需要引用。
为什么更喜欢$(…)
而不是`…`
?因为那时双引号嵌套。
如果相关路径扩展为包含空格的内容("$$(cygpath -wa "$<")"
)