当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 12 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 17:39 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
比如说我有俩文件 1.c 和 2.c,一起引用3.h
代码:
bin = "program.exe"

objects = 1.obj 2.obj

$(bin) : $(objects)
   $(CC) -o $(bin) $(objects)

1.obj : 1.c
   $(CC) -c 1.c

2.obj : 2.c
   $(CC) -c 2.c


这时候3.h中的函数在link时候出现了符号重定义,怎么解决?编译器是MSVC


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 17:44 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
源码


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 17:47 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
3.h加define防重复:
代码:
#ifndef _3_H
#define _3_H
xxxxx
#endif


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 17:56 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
cuihao 写道:
3.h加define防重复:


有的,但是不管用 =.=

1.c
代码:
#include "3.h"

int main()
{
    return 0;
}



2.c
代码:
#include "3.h"



3.h
代码:
#ifndef _3_H
#define _3_H

void f()
{
    ;
}

#endif



nmake:
/out:1.exe
/out:program.exe
1.obj
2.obj
2.obj : error LNK2005: _f 已经在 1.obj 中定义
program.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
NMAKE : fatal error U1077: “"D:\程序\VC2008 Professional Edition\VC2008\bin\cl.
EXE"”: 返回代码“0x2”
Stop.


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:00 
头像

注册: 2008-07-24 11:33
帖子: 4793
地址: 郑州
送出感谢: 4
接收感谢: 92
额,头文件是用来声明函数的,不是定义函数的。


_________________
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:14 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
cuihao 写道:
额,头文件是用来声明函数的,不是定义函数的。


原来我之前写错那么多程序 =.=
很早以前delphi时候不是挺好,大家都是unit。。。


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:17 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
不过貌似还有问题啊。
新的Makefile:
代码:
bin = "program.exe"

objects = 1.obj 2.obj 3.obj

$(bin) : $(objects)
   $(CC) -o $(bin) $(objects)

1.obj : 1.c
   $(CC) -c 1.c

2.obj : 2.c
   $(CC) -c 2.c

3.obj : 3.c
   $(CC) -c 3.c


加了一个3.c
代码:
#include "3.h"

void f()
{
    ;
}



3.h修改为:
代码:
#ifndef _3_H
#define _3_H

void f();

#endif


还是重定义 =.=


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:30 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
Makefile 是不是应该这样写:
代码:
bin = "program.exe"

objects = 1.obj 2.obj 3.obj

$(bin) : $(objects)
   $(CC) -o $(bin) $(objects)

1.obj : 1.c
   $(CC) -c -o 1.obj 1.c

2.obj : 2.c
   $(CC) -c -o 2.obj 2.c

3.obj : 3.c
   $(CC) -c -o 3.obj 3.c



_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


最后由 cjxgm 编辑于 2012-01-27 18:32,总共编辑了 1 次

页首
 用户资料  
 
9 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:32 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
好吧,加了一句
代码:
$(objects): 3.h


编译过了。。


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:34 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
引用:
$(CC) -c -o 2.obj 2.c


msvc的编译器干不了这种活计 -.-
目标文件必须与源文件同名

这贴刷新了俩小叮当啊。。


_________________
我的github: https://github.com/fy0


最后由 fy0 编辑于 2012-01-27 18:35,总共编辑了 1 次

页首
 用户资料  
 
11 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:35 
头像

注册: 2010-04-23 20:40
帖子: 1950
地址: 浙江·杭州
系统: Arch Linux
送出感谢: 2
接收感谢: 31
fy0 写道:
好吧,加了一句
代码:
$(objects): 3.h


编译过了。。

大概是你没有删掉 *.obj 吧
在做某些调整的时候最好删掉 *.obj 再编译,不然 make 会“乱来”的


_________________
我是 Giumo Clanjor(哆啦比猫/兰威举)
Where there is a hacker, there is art. | Develop for Developers. (C & perl5)
博客 | Clanjor Prods.
类 C 语言到 brainfuck 编译器


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 写Makefile时候俩c文件如何引用同一个自定义头文件?
帖子发表于 : 2012-01-27 18:38 

注册: 2011-06-27 0:57
帖子: 190
送出感谢: 7
接收感谢: 2
cjxgm 写道:
大概是你没有删掉 *.obj 吧
在做某些调整的时候最好删掉 *.obj 再编译,不然 make 会“乱来”的


嗯,试了一下,删掉之后编译也能正常通过了。
感谢提醒。


_________________
我的github: https://github.com/fy0


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 12 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译