2016-07-13 61 views
0

我正在使用makefile爲boost cpp應用程序構建我的代碼。當生成文件得到執行也顯示了以下消息在Windows控制檯中不執行文件命令

g++ -c -Wall -I/c/MinGW/include/ -lboost_system -lws2_32 Timer_async.cpp -o Timer_async.o 

,並拋出以下錯誤

#include <boost/asio.hpp> 
         ^
compilation terminated. 
mingw32-make: *** [makefile:15: Timer_async.o] Error 1 

,但如果我運行這個makefile文件從shell提示符下生成的命令

g++ -c -Wall -I/c/MinGW/include/ -lboost_system -lws2_32 Timer_async.cpp -o Timer_async.o 

程序正確構建。

我make文件是

CC=g++ 
CFLAGS=-c -Wall 
LDFLAGS=-lboost_system -lws2_32 
INCLUDES=-I/c/MinGW/include/ 
SOURCES=Timer_async.cpp 
OBJECTS=$(SOURCES:.cpp=.o) 
EXECUTABLE=hello 

all: $(SOURCES) $(EXECUTABLE) 

$(EXECUTABLE): $(OBJECTS) 
    $(CC) $(SOURCES) $(INCLUDES) $(LDFLAGS) -o [email protected] 

.cpp.o: 
    $(CC) $(CFLAGS) $(INCLUDES) $(LDFLAGS) $< -o [email protected] 

回答

0

爲什麼你同時指定$(SOURCES)$(EXECUTABLE)爲依賴關係就完了嗎?那是什麼補充說$(EXECUTABLE)規則沒有實現?

#include失敗(這是診斷消息似乎表明),因爲目標文件無法找到。您錯誤地使用了-I標誌。這隻會影響includedFile.c的位置;它對<includedFile.c>沒有影響。

您的結論「Makefile命令未執行」(我不知道「Makefile命令」是什麼)是沒有根據的。 make做了它應該的。

+0

我用這個標準Makefile形式http://mrbook.org/blog/tutorials/make/並添加我的支持INCLUDE宏。 – prasad

+0

錯誤是從shell執行同一行,並從make執行它。所以我不認爲這是由於我旗。 – prasad

0

我認爲錯誤可能是如何conemu處理文件路徑。改變後使文件以下更具體的

CFLAGS = -c -I/c/MinGW/include 
2 
3 hello: Timer_async.o 
4 
5 Timer_async.o: Timer_async.cpp 
6   g++ $(CFLAGS) Timer_async.cpp 
7 
8 clean: 
9   rm Timer_async.o 

我仍然得到錯誤,但在路徑添加雙引號中所有的錯誤被糾正後。

我修改make文件是

CFLAGS = -c -I"/c/MinGW/include" 
2 
3 hello: Timer_async.o 
4 
5 Timer_async.o: Timer_async.cpp 
6   g++ $(CFLAGS) Timer_async.cpp 
7 
8 clean: 
9   rm Timer_async.o 
相關問題