我正在寻找在特定文件夹中创建 .o 文件。但要知道它们只是在与 main.cpp 相同的文件夹中创建的。
和
但我不明白他们做了什么。
OS : Windows
Text Editor : VScode
I am using mingw64 and I use the Makefile with MinGW32-make
The C++ code you are going to see down below has nothing special,
I am just writing this code for test purpose.
cversion = -std=c++23
true = 1
false = 0
notfalse = 1
ClassPath = ./test
dotO = ./dotO
output.exe: message.o main.o
g++ $(cversion) main.o message.o -o output
main.o: main.cpp
g++ $(cversion) -c main.cpp
message.o: message.cpp
g++ $(cversion) -c message.cpp
clean:
@cls
@echo Errasing...
@del *.o
@del output.exe
@echo Files have been erased.
int messageBox(int x, int y);
int messageBox(int x, int y){
return x+y;
}
#include <iostream>
#include "message.h"
int main(){
std::cout << messageBox(10, 50) << std::endl;
}
如果您希望将它们放在特定文件夹中,则需要将它们放在那里并从那里使用它们。因此,要将它们放入名为
folder
的文件夹中,您需要类似以下内容:
output.exe: folder/message.o folder/main.o
g++ $(cversion) folder/main.o folder/message.o -o output
folder/main.o: main.cpp
g++ $(cversion) -c main.cpp -o $@
folder/message.o: message.cpp
g++ $(cversion) -c message.cpp -o $@
上面只是在每次提到应该位于文件夹中的文件名称时添加
folder/
。您可以使用模式规则(如果您使用的是 GNU make)通过 GNU-make 来简化它,并避免重复所有依赖项$^
这些使用每个规则中定义的单字符“辅助”变量:
output.exe: folder/message.o folder/main.o
g++ $(cversion) $^ -o output
folder/%.o: %.cpp
g++ $(cversion) -c $< -o $@
$@
$^
$<
Test.o: Test.cpp
g++ -c $^ -o $@
意思是:正确的参数(在示例中为 Test.cpp)
$^
意思是:左侧参数(在示例中为 Test.o)
$@
output.exe: main.o message.o
g++ $(cversion) $^ -o $@
= main.o message.o(正确的参数)
$^
=output.exe(左侧参数)