Linux cc与gcc
三个源文件:main.c sum.c show.c
/* main.c */ extern int sum(int m, int n);
extern void show(int data); int main(void)
{ show(sum(3, 5)); return 0;
} /* sum.c */ int sum(int m, int n)
{
return m+n;
} /* show.c */ #include <stdio.h> void show(int data)
{
printf("%d\n", data);
}
Makefile大体上有两种写法:
(第一种)
#Makefile objs=main.o sum.o show.o
main:$(objs)
gcc $^ -o $@
main.o:main.c
gcc -c $<
sum.o:sum.c
gcc -c $<
show.o:show.c
gcc -c $<
clean:
rm -rf *.o .*.sw?
(第二种)
/* Makefile */ objs=main.o sum.o show.o
main:$(objs)
gcc $^ -o $@
clean:
rm -rf *.o .*.sw?
下面列举以上两种的编译过程:
(第一种)
cc -c -o main.o main.c
cc -c -o sum.o sum.c
cc -c -o show.o show.c
gcc main.o sum.o show.o -o main
(第二种)
gcc -c main.c
gcc -c sum.c
gcc -c show.c
gcc main.o sum.o show.o -o main
以上两种Makefile写法都能正确编译和输出,此时很容易看出区别,虽然第二种看起来省略很多,但是各有利弊,下面介绍异同:
1、写的makefile的时候我们是可以省略生成.o文件那一步,直接由C文件生成的(源文件比较少时OK);
2、编译的时候,目录里面没有main.o sum.o show.o这个文件,但是硬要强制去编译这个的话,系统就会用cc自动先把相关的.c文件转化成相关的.o文件;
3、第二种(简单的)方法可以用(但是建议不要这么用),如果编译的文件比较多,而且彼此之间交叉的多的时候,容易出问题,如果出了问题,处理的时候就不容易查找问题 ;
4、要是找别人给你调试Makefile的时候,别人会看不懂。
Linux cc与gcc的更多相关文章
- Linux 下 的 cc 和 gcc
在Linux下一会看到cc,另一会又看到gcc,感觉又点混乱的样子.它们是同一个东西么,有啥区别呢? 一分为二地看: 首先,如果讨论范围在Unix和Linux之间,那么cc和gcc不是同一个东西.cc ...
- cc、gcc、g++、CC的区别和联系
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- cc、gcc、g++、CC的区别概括
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- linux下安装gcc详解
1.了解一下gcc 目前,GCC可以用来编译C/C++.FORTRAN.JAVA.OBJC.ADA等语言的程序,可根据需要选择安装支持的语言.我自己linux上是4.1.2版本,是不支持openMP的 ...
- 写makefile时候的cc和gcc
Linux 下 的 cc 和 gcc Linux 下 的 cc 和 gcc 周银辉 在Linux下一会看到cc,另一会又看到gcc,感觉又点混乱的样子.它们是同一个东西么,有啥区别呢 一分为二 ...
- cc和gcc
cc就是一个链接文件连接到gcc中.只不过cc是unix中常用的编辑工具,而在linux中用的gcc.有一些在unix中写好的程序要放在linux中,所以要指定命令cc为gcc,其实一样.用where ...
- cc、gcc、g++区别
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
- cc 和gcc编译器
从名字上看,老的unix系统的CC程式叫做C Compiler.但GCC这个名字按GNU的说法叫做Gnu Compiler Collection.因为gcc包含非常多编译器(C, C++, Objec ...
- 转载 cc、gcc、g++、CC的区别概括
gcc是C编译器:g++是C++编译器:linux下cc一般是一个符号连接,指向gcc:gcc和g++都是GUN(组织)的编译器.而CC则一般是makefile里面的一个名字,即宏定义,嘿,因为Lin ...
随机推荐
- SQL查询以某个字母开头
select * from a where left(a.name, 1)='H'; 或 select * from a where a.name REGEXP ''^(B|S)'';
- mysql一次性删除所有表而不删除数据库
1.执行如下语句获取删除语句 SELECT CONCAT( 'drop table ', table_name, ';' ) from information_schema.tables where ...
- EF Code-First 学习之旅 一对多的关系
public class Student { public Student() { } public int StudentId { get; set; } public string Student ...
- spark学习12(Wordcount程序之spark-shell)
在目录/home/hadoop/2016113012下有文件words.txt hello scala hello java hello python hello wujiadong 上传该文件到hd ...
- Scala的两种变量
Scala有两种变量,val和var.val类似于Java的final变量,一旦初始化了,就不能再赋值了.var如同Java中的非final变量,可以在生命周期内被多次赋值.
- java中TreeMap集合的常用方法
实现Map集合的方法这里就不在讲了 https://www.cnblogs.com/xiaostudy/p/9510763.html public Map.Entry<K,V> ceili ...
- Codeforces Beta Round #17 D.Notepad 指数循环节
D. Notepad time limit per test 2 seconds memory limit per test 64 megabytes input standard input out ...
- Spring:通配符的匹配很全面, 但无法找到元素 XXXXX' 的声明
问题:配置Spring的时候容易发生如题的这样一个经常性的错误,错误如下(以context为例) org.springframework.beans.factory.xml.XmlBeanDefini ...
- 使用ssm整合是创建Maven项目报错Failure to transfer com.thoughtworks.xstream:xstream:pom:1.3.1
Description Resource Path Location TypeFailure to transfer com.thoughtworks.xstream:xstream:pom:1.3. ...
- Coundn't load memtrack module (No such file or directory)
Coundn't load memtrack module (No such file or directory) 去仔细看日志,是包名有问题 一.出现症状 提示找logcat logcat里面发现C ...