[英]makefile for c++11 doesn't work
我是 makefile 的新手。 我創建了以下生成文件:
CC=g++
DEBUG= -g
CFLAGS=-c -Wall -std=c++11 $(DEBUG)
all: hello
hello: ConsoleApplication1.o clock.o communication.o device_manager.o devices.o
$(CC) ConsoleApplication1.o clock.o communication.o device_manager.o devices.o
ConsoleApplication1.o: ConsoleApplication1.cpp
$(CC) $(CFGLAS) ConsoleApplication1.cpp
clock.o: clock.cpp clock.h
$(CC) $(CFGLAS) clock.cpp
communication.o: communication.cpp
$(CC) $(CFGLAS) communication.cpp
device_manager.o: device_manager.cpp
$(CC) $(CFGLAS) device_manager.cpp
devices.o: devices.cpp
$(CC) $(CFGLAS) devices.cpp
clean:
rm -rf *.o hello
我將 makefile 放在所有代碼文件的目錄中,並從命令行運行命令“make”。
我收到了很多錯誤,例如:
ConsoleApplication1.cpp:494:30: 錯誤:'chrono' 不是 'std' mytime::duration_timer_t 計時器的成員; ^ ConsoleApplication1.cpp:494:30:錯誤:'chrono' 不是'std'的成員 ConsoleApplication1.cpp:494:55:錯誤:模板參數 1 無效 mytime::duration_timer_t 計時器; ^ ConsoleApplication1.cpp:494:65: 錯誤:';' 之前的聲明類型無效令牌 mytime::duration_timer_t 計時器; ^ ConsoleApplication1.cpp:495:11: 錯誤:請求'timer' 中的成員'set_duration',它是非類類型'int' timer.set_duration(std::chrono::seconds(120)); ^ ConsoleApplication1.cpp:495:29: 錯誤:'std::chrono' 尚未聲明 timer.set_duration(std::chrono::seconds(120)); ^ ConsoleApplication1.cpp:496:16: 錯誤:請求'timer'中的成員'start',它是非類類型'int' for( timer.start(); not(timer.expired()); )
當我在 codeBlocks 中編譯完全相同的文件代碼時,它會編譯,所以我猜我在 make 文件中有一些錯誤。 我的項目名稱“general.h”中有一個頭文件,它沒有 cpp 文件。 我應該把它也放在makefile中嗎?
您的規則是$(CFGLAS)
,而不是$(CFLAGS)
。
這意味着-std=c++11
永遠不會傳遞給編譯器,因此您不存在 C++11 功能。
更注重細節!
您還需要在hello
規則中將$(CFLAGS)
傳遞給$(CC)
,否則您的編譯器調用將不同步並且可能會崩潰。
當您使用-std=c++11
編譯目標文件時,您可以在沒有該標志的情況下鏈接它們。 您是否嘗試將-std=c++11
添加到hello
規則中?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.