0

このジェネリック 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

ここに、私が実行しているメイクファイルの完全なバージョンがあります。

Mac OS X 10.6.8 と gcc 4.2.1 を使用しており、SDL と OpenGL を使用しmain.cppてコンパイルしようとしています。SDLMain.mSDLMain.h

ポップアップするエラーは次のとおりです。

main.d:1: *セパレーターがありません。止まる。

ファイル main.d (makefile によって生成される) は次のとおりです。

-n ./
main.o: main.cpp

どうしたの?

4

2 に答える 2

1

表示されたMakefile[exerpt]は、作成方法を示していませんmain.dが、実際のに含まれているようですMakefile。これはおそらくmain.cpp-n ./' is clearly not validmake`構文の依存関係を含むことを意図しています。今のところファイルを削除してみてください。ファイルが再生成された場合は、ファイルの生成方法を見つけて修正する必要があります。再度生成される方法を確認するには、ファイルを削除して使用します

make -p 2>&1 | tee mkerr

これが完了すると、使用したルールを含むコマンドmkerrの出力が含まれます。makeどこかに.dファイルを作成する方法のルールがあります。運が良ければ、ファイルを削除すると問題が解決します...

ペーストビンに投稿されたコードに基づくと、問題は%.dファイルの作成方法のルールです。

%.d: %.cpp
    @echo -n $(dir $<) > $@
    @$(DEPEND.d) $< << $@

問題は、見つかったが改行を回避するためechoのオプションを理解していないことです。-nルールの最初の行には、ファイルのディレクトリプレフィックスを追加する必要があります。esieastの修正は、オプションechoを理解するより良いものを見つけることです。ただし、シェルビルトインである傾向がある-nため、別のシェルを使用する必要がある場合があります。その場合は、誤動作しないバージョンへのechoフルパスを使用するのが最善の方法です。echo

于 2012-11-25T17:33:35.187 に答える
0

に置き換えecho -nprintf、問題を解決しました:

# 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) $< >> $@ 
于 2012-11-25T17:57:35.920 に答える