簡體   English   中英

c++11的makefile不起作用

[英]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.

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