4

プロジェクトの作成中に発生し続けるこのエラーの原因を特定できません。

i686-apple-darwin11-llvm-g++-4.2: -lncurses: linker input file unused because linking not done

そして私のmakeファイルは次のようになります:

CC = g++

LIB_FLAGS = -l ncurses

FLAGS = $(LIB_FLAGS)

DEPENDENCIES = window.o element.o

# FINAL OUTPUTS
main: main.cpp $(DEPENDENCIES)
    $(CC) $(FLAGS) -o main.out main.cpp $(DEPENDENCIES)

# MODULES
window.o: main.h classes/window.cpp
    $(CC) $(FLAGS) -c classes/window.cpp

element.o: main.h classes/element.cpp
    $(CC) $(FLAGS) -c classes/element.cpp

# CLEAN
clean:
    rm -rf *.o
    rm main.out

すべてが正常にコンパイルされますが、このエラーメッセージの原因とその意味が知りたいだけです。

4

3 に答える 3

5

リンカオプションをと一緒にコンパイラ呼び出しに渡します-c。これは、リンクが実行されないため、-lオプションが使用されないことを意味します。あなたの場合、あなたLIB_FLAGSはにあるべきではなくFLAGS、代わりにmain: ...ルールで指定されるべきです:

main: main.cpp
        $(CC) $(FLAGS) $(LIB_FLAGS) ...
于 2012-09-21T06:58:52.887 に答える
4

ソースファイルをコンパイルするときにリンクフラグを付けないでください(-cフラグ)。このサンプルmakefileを見てください(makefileドキュメントと非常によく似ています)

CPP = g++
CPPFLAGS =-Wall -g
OBJECTS = main.o net.o
PREFIX = /usr/local

.SUFFIXES: .cpp .o

.cpp.o:
        $(CPP) $(CPPFLAGS) -c $<

.o:
        $(CPP) $(CPPFLAGS) $^ -o $@

main: $(OBJECTS)
main.o: main.cpp
net.o: net.cpp net.h


.PHONY:
install: main
        mkdir -p $(PREFIX)/bin
        rm -f $(PREFIX)/bin/main
        cp main $(PREFIX)/bin/main


clean:
        rm -f *.o main
于 2012-09-21T07:16:02.887 に答える
3

すでに述べたように、コンパイル段階でリンカー関連のフラグを渡します。通常、コンパイルとリンクに異なるフラグが必要です。

CC = g++

CPPFLAGS = -Wall -g -c -o $@

LDFLAGS = -l ncurses -o $@

DEPENDENCIES = main.o window.o element.o

# FINAL OUTPUTS
main: $(DEPENDENCIES)
    $(CC) $(LDFLAGS) $(DEPENDENCIES)

# MODULES
main.o: main.h main.cpp
    $(CC) $(CPPFLAGS) main.cpp

window.o: main.h classes/window.cpp
    $(CC) $(CPPFLAGS) classes/window.cpp

element.o: main.h classes/element.cpp
    $(CC) $(CPPFLAGS) classes/element.cpp

# CLEAN
clean:
    -rm main $(DEPENDENCIES)
于 2012-09-21T06:59:01.600 に答える