簡體   English   中英

C ++ makefile說明(在其中使用的依賴項和宏)?

[英]c++ makefile explanation (dependencies and macros used in it)?

我編寫了以下makefile,但是我真的不明白發生了什么(我基於模板進行了說明)。 我編寫了以下makefile,但是我真的不明白發生了什么(我基於模板進行了說明)。

1)為什么DEPENDS宏在右側具有該特定信息? 我以為目標文件僅依賴於.h文件?

2)為什么我們必須指定ARCH?

3)為什么在CPPOPTIONS中需要標志-IStanfordCPPLib? 我知道我們需要LIB標志-lStanfordCPPLib,因為此宏指定了.a文件的位置,該文​​件使用了所有.h文件,但是我不確定為什么LIB不被用作RandomWriter.o的依賴項然后?

4)對CPPOPTIONS和LDOPTIONS的意義和功能的任何解釋也將不勝感激

PROGRAM = RandomWriter
OBJECTS = RandomWriter.o
DEPENDS = \
   RandomWriter.cpp \
   Makefile

ARCH = i386
CPPOPTIONS = -IStanfordCPPLib -arch $(ARCH) -fvisibility-inlines-hidden
LDOPTIONS = -LStanfordCPPLib -arch $(ARCH)
LIB = -lStanfordCPPLib

all: $(PROGRAM)

RandomWriter : $(OBJECTS)
    g++ -o $(PROGRAM) $(LDOPTIONS) $(OBJECTS) $(LIB)

RandomWriter.o : $(DEPENDS)
    @touch console.h
    g++ -c $(CPPOPTIONS) RandomWriter.cpp
    @rm console.h

clean:
    rm -f *.o *.a $(PROGRAM)

1)目標文件取決於用於編譯它的任何內容。 我懷疑在這種情況下可能沒有頭文件,否則依賴項將在.cpp 頭文件上。 如果您有標頭,則應將其添加到依賴項中。

2)ARCH使您可以針對不同體系結構家族的目標進行編譯。 例如,64位與32位。 您可能還會發現ARCH用於交叉編譯,在這種情況下, Makefile將根據ARCH的值切換工具鏈(例如,將g++替換為arm-linux-gnueabi-g++ ),而不是使用-arch編譯器標志。 您應該檢查所需的目標體系結構,然后確定是否需要此體系結構。

3) -IStanfordCPPLib意味着將在包含搜索路徑中使用目錄StanfordCPPLib 這是必需的,因為編譯器必須能夠找到編譯RandomWriter.o所需的包含。

4) CPPOPTIONS看起來像編譯器選項, LDOPTIONS看起來像用於鏈接的選項。 您可以看到,前者用於構建.o文件,而后者用於鏈接可執行文件。

有關更多信息,請參見GNU make手冊

暫無
暫無

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

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