簡體   English   中英

Makefile不會將.o文件放在生成文件夾中

[英]Makefile does not put .o files in build folder

問題

我具有目錄和文件的以下結構:

Makefile
main.cpp
|source
|-A.cpp
|-B.cpp
|-Linker.h
|build

每個文件都有這種結構

main.cpp

//main.cpp
#include "source/Linker.h"

int main(){
    A(...)
    B(...)
}

鏈接器

//Linker.h
void A
void B

A.cpp B.cpp各自定義一個特定的功能。

我想做的是使用Makefile構建此結構並將所有.o文件放入build目錄中


我嘗試了什么

所以我做了下面的Makefile

CC = g++ -std=c++11
CFLAGS = -c -Wall

OBJS = ./build/main.o ./build/A.o ./build/B.o 
OUT  = Project

all: Project

Project: $(OBJS)
    $(CC) $(OBJS) -o Project

./build/main.o: main.cpp
    $(CC) $(CFLAGS) main.cpp

./build/A.o: ./source/A.cpp
    $(CC) $(CFLAGS) ./source/A.cpp

./build/B.o: ./source/B.cpp
    $(CC) $(CFLAGS) ./source/B.cpp

錯誤

但這會在頂層目錄中生成所有.o文件,並出現以下錯誤:

g++: error: ./build/main.o: No such file or directory
g++: error: ./build/A.o: No such file or directory
g++: error: ./build/B.o: No such file or directory

我應該如何進行?

編譯器會告訴您,帶有那些.o文件的輸出目錄不存在。

一種解決方法是使目標依賴於它們的目錄並顯式指定輸出文件(使用-o $@ ):

Project: $(OBJS)
    $(CC) -o $@ $(OBJS) 

build/%.o: %.cpp | build
    $(CC) -o $@ $(CFLAGS) $<

build/%.o: source/%.cpp | build
    $(CC) -o $@ $(CFLAGS) $<

build:
    mkdir $@

請注意,以上使用一種模式規則來構建所有.o文件。


通常, CXXCXXFLAGS一起用於C ++編譯器。 CCCFLAGS用於構建C代碼。

暫無
暫無

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

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