我正在使用this generic makefile。
使用此自定义选项:
# The pre-processor options used by the cpp (man cpp for more).
CPPFLAGS = -Wall -I/Library/Frameworks/SDL.framework/Headers
# The options used in linking as well as in any direct use of ld.
LDFLAGS = -framework SDL -framework Cocoa -framework OpenGL
# The executable file name.
# If not specified, current directory name or `a.out' will be used.
PROGRAM = app
# The source file types (headers excluded).
# .c indicates C source files, and others C++ ones.
SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp .m
clean:
$(RM) $(OBJS) $(PROGRAM) $(PROGRAM)
而不是:
# The pre-processor options used by the cpp (man cpp for more).
CPPFLAGS = -Wall
# The options used in linking as well as in any direct use of ld.
LDFLAGS =
# The executable file name.
# If not specified, current directory name or `a.out' will be used.
PROGRAM =
# The source file types (headers excluded).
# .c indicates C source files, and others C++ ones.
SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp
clean:
$(RM) $(OBJS) $(PROGRAM) $(PROGRAM).exe
Here你可以找到我正在运行的makefile的完整版本。
我正在使用Mac OS X 10.6.8和gcc 4.2.1并尝试使用SDL和OpenGL编译main.cpp
SDLMain.m
和SDLMain.h
。
弹出的错误是:
main.d:1: * 缺少分隔符。停止。
和文件main.d(由makefile生成)是这样的:
-n ./
main.o: main.cpp
有什么问题?
答案 0 :(得分:1)
您展示的Makefile [exerpt]未显示main.d
是如何创建的,但它似乎包含在实际的Makefile
中。它可能意味着包含main.cpp
但-n ./' is clearly not valid
make`语法的依赖关系。尝试暂时删除该文件,如果它重新生成,您需要找到它的生成方式并解决此问题。要查看它是如何生成的,请删除该文件并使用
make -p 2>&1 | tee mkerr
完成后,mkerr
包含make
命令的输出,包括它使用的规则。在某处有一条规则如何构建.d
文件。运气好的话,删除文件可以解决问题......
根据发布到pastebin的代码,问题是如何创建%.d
文件的规则:
%.d: %.cpp
@echo -n $(dir $<) > $@
@$(DEPEND.d) $< << $@
问题是找到的echo
不理解-n
选项,这意味着要避免任何换行。规则的第一行应该为文件添加目录前缀。 esieast修复程序是找到一个更好的echo
,它可以理解-n
选项。虽然,您可能需要使用不同的shell,因为echo
往往是内置的shell!在这种情况下,您可能最好使用echo
上的完整路径到不会出现行为异常的版本。
答案 1 :(得分:0)
我将echo -n
替换为printf
并解决了问题:
# Rules for creating dependency files (.d).
#------------------------------------------
%.d:%.c
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.C
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.cc
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.cpp
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.CPP
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.c++
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.cp
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.cxx
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@
%.d:%.m
@printf $(dir $<) > $@
@$(DEPEND.d) $< >> $@