2014-09-29 111 views
0

我無法運行我的makefile,它似乎不使用我指定的包含路徑。 生成文件看起來是這樣的:linux-C++ makefile不使用包含路徑

SHELL = /bin/sh 
CC  = g++ 
FLAGS = -std=c++0x 
CFLAGS = -Wall -fPIC -g -I/include 
LDFLAGS = -shared 

TARGET = TNet.so 
SOURCES = $(shell echo src/*.cpp) 
HEADERS = $(shell echo include/*.h) 
OBJECTS = $(SOURCES:.cpp=.o) 


all: $(TARGET) 

$(TARGET): $(OBJECTS) 
    $(CC) $(FLAGS) $(CFLAGS) $(DEBUGFLAGS) -o $(TARGET) $(OBJECTS) 

clean: 
    -rm *.o $(TARGET 

我的目錄樹是這個樣子:

rootfolder 
/ \ 
src  include 

什麼想法?

+0

'rootfolder'你真的認爲你把你的項目放在'/'下? – 2014-09-29 17:42:28

+0

不,我只是說它的根文件夾爲我的項目 – Henningsson 2014-09-29 17:47:48

回答

0

Makefile作品對我來說:

$ cat Makefile 
CPPFLAGS = -Iinclude 
CXXFLAGS = -Wall 
foo: foo.cpp 

$ make foo 
g++ -Wall -I/include foo.cpp -o foo 

它利用已定義的implicit rules。你的情況的標誌,以尋找有:

CPPFLAGS 
Extra flags to give to the C preprocessor and programs that use it (the C and Fortran compilers). 
CXXFLAGS 
Extra flags to give to the C++ compiler. 

請注意-I dir是如何爲預處理器的標誌,而-Wall通常是一個標誌,C++編譯器。

+0

謝謝你的工作!還跟進問題:我得到編譯錯誤「未定義的引用'主''。但我想編譯一個庫,所以不應該需要一個主函數?或者我錯過了什麼? – Henningsson 2014-09-29 18:06:17

+0

@亨寧鬆_「也跟着問題......」這是一個完全不同而又無關的問題,請再問一個問題!這裏有一個提示:[什麼是未定義的引用/無法解析的外部符號錯誤,以及如何解決它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved - 外部符號錯誤和知識-DO-修復) – 2014-09-29 18:09:33

0

認爲你Makefile實際上位於rootfolder下,這是你的編譯器調用的工作目錄,你需要指定include路徑不是絕對路徑,而是相對

CFLAGS = -Wall -fPIC -g -I./include 

CFLAGS = -Wall -fPIC -g -Iinclude 
+0

仍然沒有工作,仍然得到相同的錯誤信息,當我運行讓我得到一些奇怪的輸出: g ++ -c -o src/client.o src/client .cpp 不應該有更多的標誌嗎?看起來像所有CFLAGS被排除 – Henningsson 2014-09-29 18:01:04

+0

@Henningsson究竟哪個錯誤信息?請編輯您的問題以添加此信息。另外'SOURCES = $(shell echo src/*。cpp)'對我來說看起來不正確,查找信息中的'make functions'。 – 2014-09-29 18:04:16

+0

@Henningsson這裏有更多關於['make file name functions']的信息(http://www.gnu.org/software/make/manual/make.html#File-Name-Functions) – 2014-09-29 18:12:28