[英]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
文件。
通常, CXX
與CXXFLAGS
一起用於C ++編譯器。 CC
和CFLAGS
用於構建C代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.