记一次makefile的经历
程序员文章站
2022-06-01 20:23:09
...
哎呀,刚接触makefile 和 linux 不久,搞得很多C++的东西都抛诸脑后了,真的惭愧哟。
这是我的文件目录(实际开发最好不要这样命名文件,否则到之后自己都不知道这些文件都是干嘛的)
一开始的源代码:
.1 头文件
#include <iostream>
using std::cout;
using std::endl;
extern int value;
void setValue(int tmp);
.1 源文件
#include "1.h"
void setValue(int tmp)
{
value = tmp;
}
.2 头文件
#include <iostream>
using std::cout;
using std::endl;
extern int value;
void getValue();
.2 源文件
#include "2.h"
void getValue()
{
cout << "value:" << value << endl;
}
.main 文件
#include <iostream>
#include "1.h"
#include "2.h"
int value;
int main(int argc, char** argv)
{
setValue(100);
getValue();
}
Makefile 文件
SRC = $(wildcard ./*.c)
OBJ = $(patsubst %.c, %.o, $(SRC))
ALL: main.out
$(OBJ): $(SRC)
g++ -c $(SRC)
main.out: $(OBJ)
g++ $^ -o [email protected]
这样编译过后,直接出现了函数重定义的情况,然后看了下是在链接的时候出现的问题,怎么回事呢?再仔细看看代码,main里面包含了1和2的文件, 链接的时候,又把1和2的文件链接了一遍,所以才会出现这个问题,怎么解决呢?如果放在windows下面,很快就会反应过来,但是放在Linux下面,就是半天反应不过来,确实还是欠些火候,也是技术实力提升的一个瓶颈所在吧!下面放代码
1的头文件
#ifndef __1_H__
#define __1_H__
#include <iostream>
using std::cout;
using std::endl;
extern int value;
void setValue(int tmp);
#endif
```、```
2的头文件
#ifndef __2_H__
#define __2_H__
#include <iostream>
using std::cout;
using std::endl;
extern int value;
void getValue();
#endif
其余的文件不用改,这些是我把代码放在QT(MinGW)下面跑了一遍就反应过来了。共勉吧。
就到这里了,快过年了,提前祝大家新年快乐,心想事成,祝大家在新的一年里能够遇到心目中的TA。
上一篇: python 装饰器
下一篇: java编程动态规划 神奇的口袋