急求!!一个makefile如何生成两个可执行文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求!!一个makefile如何生成两个可执行文件相关的知识,希望对你有一定的参考价值。
一个makefile实现同时编译生成两个应用程序app1,app2,设他们的源文件分别为app1.c,app2.c
参考技术A all:main1 main2main1:
gcc -o main1 main1.o
main1.o:main1.c
gcc -c main1.o main1.c
main2:
gcc -o main2 main2.o
main2.o:main2.c
gcc -c main2.o main2.c
最后生成main1 ,main2 2个可执行文件,答案还满意吗?本回答被提问者采纳
C ++如何将两个makefile对象目标规则(位于另一个文件夹中)组合到一个目标/规则中?
我的C ++程序包含三个文件:
- 两个源文件'main.cpp'和'hellolib.cpp'
- 头文件'hellolib.h'
我正在为这个程序创建一个makefile。对于我的任务,我需要一个目标('hello')来编译可执行文件中的所有源文件。另一个目标('obj')应该将所有'.cpp'文件编译成对象,并将它们链接在一个可执行文件中。
在运行make时,我更喜欢在名为'bin'的单独文件夹中创建目标文件。源文件将位于名为“src”的文件夹中。这些文件夹是兄弟,makefile位于其父文件夹中。
我的makefile工作正常但我希望两个目标'bin / main.o'和'bin / hellolib.o'合二为一,以减少规则数量,特别是以后我处理更多源文件时。我想象替换会看起来像这样,但它似乎不起作用。
它给了我错误:“***没有规则来制作目标'bin / main.o','obj'需要。停止。
bin/%.o : src/%.cpp
$(CC) -c $< -o $@
工作Makefile:
CC = g++
SOURCES = ./src/main.cpp \
./src/hellolib.cpp
OBJECTS = ./bin/main.o \
./bin/hellolib.o
hello : $(SOURCES)
$(CC) -o $@ $^
obj : $(OBJECTS)
$(CC) -o $@ $^
bin/main.o : src/main.cpp
$(CC) -c $< -o $@
bin/hellolib.o : src/hellolib.cpp
$(CC) -c $< -o $@
clean:
@rm -rf hello obj bin/*.o
main.cpp中:
#include "hellolib.h"
int main() {
Hello h("Name");
h.Print();
return 0;
}
hellolib.cpp
#include "hellolib.h"
#include <iostream>
Hello::Hello(std::string name) {
if (name.empty()) {
cout << "Name is not valid!";
return;
}
_name = name;
}
void Hello::Print() {
cout << "Hello " << _name << endl;
}
hellolib.h
#ifndef HELLO_LIB_H
#define HELLO_LIB_H
#include <string>
using namespace std;
class Hello {
std::string _name;
public:
Hello(std::string name);
void Print();
};
#endif
你需要改变:
OBJECTS = ./bin/main.o \
./bin/hellolib.o
至:
OBJECTS = bin/main.o \
bin/hellolib.o
(删除主要的“./
”)。要么是这样,要么改变你的模式规则以包括领先的“./
”:
./bin/%.o : src/%.cpp
$(CC) -c $< -o $@
使规则匹配使用文本匹配。它不是基于文件名,所以“./././foo
”和“foo
”不是一回事。
我个人建议像这样重写:
SOURCES = src/main.cpp \
src/hellolib.cpp
OBJECTS = $(patsubst src/%.cpp,bin/%.o,$(SOURCES))
所以你只需要将文件列表保存在一个地方。
您可以制定一个规则来构建符合特定模式的任何内容,如下所示:
bin/%.o : src/%.cpp
$(CC) -c -o $@ $<
这将从相应的源bin/%.o
编译任何src/%.cpp
依赖项。
当编译C++
使用CXX
而不是CC
(用于C
代码)时,它也是标准的。
以上是关于急求!!一个makefile如何生成两个可执行文件的主要内容,如果未能解决你的问题,请参考以下文章