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

ecfdbz9o  于 2023-08-09  发布在  其他
关注(0)|答案(3)|浏览(121)

问题:

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

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.

字符串

message.h:

int messageBox(int x, int y);

message.cpp:

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

main.cpp:

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

int main(){
    std::cout << messageBox(10, 50) << std::endl;
}

重要详情:

OS : Windows
Text Editor : VScode
I am using mingw64

mefy6pfw

mefy6pfw1#

如果你想把它们放在一个特定的文件夹中,你需要把它们放在那里,然后从那里使用它们。因此,要将它们放在名为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使用模式规则(如果您使用GNUmake)和$^来简化它,以避免重复所有依赖项

output.exe: folder/message.o folder/main.o
    g++ $(cversion) $^ -o output

folder/%.o: %.cpp
    g++ $(cversion) -c $< -o $@


这些使用每个规则中定义的单个字符“helper”变量:

  • $@当前规则的目标
  • $^当前规则的依赖项
  • $<当前规则的第一个依赖项
ibps3vxo

ibps3vxo2#

$^和$@在简单的word中

范例:

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

wmvff8tz

wmvff8tz3#

只是为了添加到@ChrisDodd上面的示例中,一个常见的约定是使用目标文件夹的变量,然后生成对象列表,如下所示:

OBJ_DIR := folder
SRCS := main.cpp message.cpp
OBJS := $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(SRCS))

$(info Note: OBJS is $(OBJS))

output.exe: $(OBJS)
    g++ $(cversion) $(OBJS) -o $@

$(OBJS) : $(OBJ_DIR)/%.o : %.cpp
    g++ $(cversion) -c $< -o $@

字符串

相关问题