簡體   English   中英

鏈接器輸入文件未使用c ++ g ++ make文件

[英]Linker input file unused c++ g++ make file

我無法弄清楚導致這個錯誤的原因是我一直在制作我的項目:

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

一切都編譯好,但我只是好奇是什么導致這個錯誤信息及其含義..

您正在將鏈接器選項與-c一起傳遞給編譯器調用,這意味着不執行鏈接,因此未使用-l選項。 在您的情況下,您的LIB_FLAGS不應該在FLAGS ,而是在main: ...規則中指定:

main: main.cpp
        $(CC) $(FLAGS) $(LIB_FLAGS) ...

編譯(-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

如前所述,您已經在編譯階段傳遞了與鏈接器相關的標志。 通常你需要不同的標志來編譯和鏈接,例如

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM