[Linux] 源文件在不同目錄中的Makefile


Answers

如果你在一個子目錄中有代碼依賴於另一個子目錄中的代碼,那麼你最好在頂層使用一個makefile。

有關完整的基本原理,請參閱“ 遞歸製作有害 ”,但基本上,您希望製作出需要的全部信息來決定是否需要重建文件,如果僅告訴它大約三分之一你的項目。

上面的鏈接似乎無法訪問。 這裡可以找到同一份文件:

Question

我有一個項目的目錄結構是這樣的:

                         $projectroot
                              |
              +---------------+----------------+
              |               |                |
            part1/          part2/           part3/
              |               |                |
       +------+-----+     +---+----+       +---+-----+
       |      |     |     |        |       |         |
     data/   src/  inc/  src/     inc/   src/       inc/

我應該如何編寫一個部分/ src(或真正在哪裡)可以在/ c ++源文件中完成/鏈接的makefile?/ src?

我可以做一些像-I $ projectroot / part1 / src -I $ projectroot / part1 / inc -I $ projectroot / part2 / src ...

如果這能起作用,是否有更簡單的方法來做到這一點。 我見過每個相應部分都有makefile的項目嗎? 文件夾。 [在這篇文章中,我用了bash語法中的問號]




我認為最好指出使用Make(無論是否遞歸)通常是您可能想要避免的,因為與今天的工具相比,它很難學習,維護和擴展。

這是一個非常棒的工具,但直接使用應該在2010年被認為是過時的。

當然,除非你正在一個特殊的環境中工作,例如在一個遺留項目中工作等。

使用IDE, CMake或者如果你很辛苦,則使用Autotools

(由於downvotes編輯,ty Honza指出)




遞歸使用Make

all:
    +$(MAKE) -C part1
    +$(MAKE) -C part2
    +$(MAKE) -C part3

這允許make分成作業並使用多個核心




VPATH選項可能會派上用場,它告訴我們需要查找什麼目錄來查找源代碼。 不過,您仍然需要為每個包含路徑指定-I選項。 一個例子:

CXXFLAGS=-Ipart1/inc -Ipart2/inc -Ipart3/inc
VPATH=part1/src:part2/src:part3/src

OutputExecutable: part1api.o part2api.o part3api.o

這將自動在任何VPATH指定的目錄中找到匹配的partXapi.cpp文件並進行編譯。 然而,當你的src目錄被分成子目錄時,這會更有用。 正如其他人所說的,對於您所描述的內容,您可能最好使用每個部分的makefile,特別是如果每個部分都可以單獨使用。




Links