如何在特定文件夹中创建 .o 文件 - Makefile?

问题描述 投票:0回答:2

我在寻找什么:

我正在寻找在特定文件夹中创建 .o 文件。但要知道它们只是在与 main.cpp 相同的文件夹中创建的。

我已经看到了:

在单独的文件夹中创建 *.o 文件

如何将.o文件输出到特定文件夹?

但我不明白他们做了什么。

重要细节:

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.

Makefile 代码:

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.

消息.h:

int messageBox(int x, int y);

消息.cpp:

int messageBox(int x, int y){
    return x+y;
}

主.cpp:

#include <iostream>
#include "message.h"

int main(){
    std::cout << messageBox(10, 50) << std::endl;
}
c++ makefile
2个回答
1
投票

如果您希望将它们放在特定文件夹中,则需要将它们放在那里并从那里使用它们。因此,要将它们放入名为

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 $@
  • 当前规则的目标
  • $@
  • 当前规则的依赖关系
  • $^
  • 当前规则的第一个依赖项
    
        

1
投票

示例:

$<

  • 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(左侧参数)

    

© www.soinside.com 2019 - 2024. All rights reserved.