社区
C语言
帖子详情
gcc如何指定目标文件的输出目录?
leehq
2006-12-25 06:13:49
例如我有这个几个文件:
1.c 2.c 3.c
我想将编译后的目标文件(就是*.o的文件)放到目录output下,改怎么做?
难道只能这样:
gcc -c 1.c -o output/1.o
gcc -c 2.c -o output/2.o
gcc -c 3.c -o output/3.o
不能一条命令就搞定吗?
...全文
5844
44
打赏
收藏
gcc如何指定目标文件的输出目录?
例如我有这个几个文件: 1.c 2.c 3.c 我想将编译后的目标文件(就是*.o的文件)放到目录output下,改怎么做? 难道只能这样: gcc -c 1.c -o output/1.o gcc -c 2.c -o output/2.o gcc -c 3.c -o output/3.o 不能一条命令就搞定吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
44 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chb79
2007-01-11
打赏
举报
回复
leehq(没有读过高中的人) ( ) 信誉:99 Blog 2007-01-10 14:06:00 得分: 0
下面这样的语法能够运行?
gcc $(SOURCES) -o $(OBJS)
你自己看看:
gcc 1.c 2.c -o 1.o 2.o
这样还不错?
-----------------------------------------------------
To leehq(没有读过高中的人):
定义了$(SOURCES), $(OBJS)之后,命令行不是像你说的那样
gcc $(SOURCES) -o $(OBJS)
而应该是:
$(OBJS): output/%.o:%.c
gcc -c $< -o $@
至于为什么这样,这就是makefile的自动变量: %,@,< 的神奇之处啦:)
你可以google一下makefile,自己在研究研究。
下面这个是一个完整的makefile,功能简单,就是将obj放到 output下,你好好研究研究
SRCS := $(wildcard *.c)
OBJS := $(patsubst %.c,output/%.o,$(SRCS))
TARGET := hello
all: $(TARGET)
clean:
rm -f $(TARGET) $(OBJS)
$(TARGET):$(OBJS)
gcc -o $(TARGET) $(OBJS)
$(OBJS):output/%.o:%.c
gcc -c $< -o $@
leehq
2007-01-11
打赏
举报
回复
我还不知道makefile里的目标名可以带两个冒号。
多谢
chb79(哈哈镜)
!!!!!!!!!!!!!!!1
lk_517
2007-01-10
打赏
举报
回复
OBJS = $(patsubst %.c,%.o,$(SOURCES))
然后就把.c和.o对应起来了阿,你就不用管具体文件名了阿
然后gcc $(AppName) -o $(OBJS)
晕,这个自己试一下就行了阿
怎么会出现gcc $(SOURCES) -o $(OBJS)这种写法?
虽然现在有万能文件,不过建议你还是看看makefile写法
leehq
2007-01-10
打赏
举报
回复
chb79(哈哈镜)
你真是神了!
多谢多谢!
leehq
2007-01-10
打赏
举报
回复
lk_517(风雷,http://likunarmstrong.googlepages.com/home)
leehq:
为什么不行?错误信息是什么
-----------------------------------------------------
下面这样的语法能够运行?
gcc $(SOURCES) -o $(OBJS)
你自己看看:
gcc 1.c 2.c -o 1.o 2.o
这样还不错?
leehq
2007-01-09
打赏
举报
回复
还有没有高手来指点一下?
chb79
2007-01-09
打赏
举报
回复
一个适合中小规模的makefile模版,基本上自己按照实际情况指定一下 源文件,目标文件,头文件目录,以及源文件后缀就行了。
# ---------------------------------------------------------------------------
# commands
# ---------------------------------------------------------------------------
CC := gcc
LINK := gcc
RM := rm -rf
MV := mv
TAR := tar
MKDIR := mkdir
# ---------------------------------------------------------------------------
# settings
# ---------------------------------------------------------------------------
SRC_SUFFIX := .c
OBJ_SUFFIX := .o
LIB_SUFFIX := .a
BIN_SUFFIX := .exe
DLL_SUFFIX := .so
INC_PREFIX := -I
LIB_PREFIX := -L
OPT_C := -c
OPT_OUT := -o
OPT_LINKOUT := -o
CFLAGS := $(OPT_C)
LIBFLAGS := -Debug
# ---------------------------------------------------------------------------
# directories
# ---------------------------------------------------------------------------
SRC_DIR := ./src
OBJ_DIR := ./obj
INC_DIR := ./inc
LIB_DIR := ./lib /usr/local/lib /lib /usr/lib
# ---------------------------------------------------------------------------
# common settings
# ---------------------------------------------------------------------------
SRCS := $(wildcard $(SRC_DIR)/*$(SRC_SUFFIX))
OBJS := $(patsubst $(SRC_DIR)/%$(SRC_SUFFIX),$(OBJ_DIR)/%$(OBJ_SUFFIX),$(SRCS))
INCS := $(addprefix $(INC_PREFIX), $(INC_DIR))
LIBS := $(addprefix $(LIB_PREFIX), $(LIB_DIR)) $(LIBFLAGS)
TEMPFILES := core core.* *$(OBJ_SUFFIX) temp.* *.out typescript*
# ---------------------------------------------------------------------------
# make rule
# ---------------------------------------------------------------------------
TARGET := loader
.PHONY: all clean
all: $(TARGET)
clean:
$(RM) $(TARGET)$(BIN_SUFFIX) $(OBJS)
$(TARGET):$(OBJS)
$(LINK) $(OPT_LINKOUT)$(TARGET)$(BIN_SUFFIX) $(LIBS) $(OBJS)
$(OBJS):$(OBJ_DIR)/%$(OBJ_SUFFIX):$(SRC_DIR)/%$(SRC_SUFFIX)
$(CC) $(CFLAGS) $(INCS) $(OPT_OUT)$@ $<
lk_517
2007-01-09
打赏
举报
回复
leehq:
为什么不行?错误信息是什么
leehq
2007-01-07
打赏
举报
回复
lk_517(风雷,http://likunarmstrong.googlepages.com/home)
当然看了,晕
在makefile里面写
SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
然后就把.c和.o对应起来了阿,你就不用管具体文件名了阿
------------------------------------------------------------
这样写我也会,问题是你如何编译?
难道这样:
gcc $(SOURCES) -o $(OBJS)
好像不行啊????????
lbaby
2007-01-07
打赏
举报
回复
多看点有关文档,呵呵
lk_517
2007-01-01
打赏
举报
回复
当然看了,晕
在makefile里面写
SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
然后就把.c和.o对应起来了阿,你就不用管具体文件名了阿
leehq
2006-12-31
打赏
举报
回复
lk_517(风雷,http://likunarmstrong.googlepages.com/home)
------------------------------------------------------------
你没看贴?
leehq
2006-12-30
打赏
举报
回复
duchuanying()
.c.o:
gcc -c $< -o output/$@
就可以了呀!
对于每个.c都执行 gcc 1.c -o output/1.o
----------------------------
即使这样写,好像也要先把文件名一个个打上吧···
例如:
OBJECTS=1.o 2.o 3.o
.SUFFIXES: .o .c
.c.o:
gcc -c $< -o $(OUTDIR)/$@
all: $(OBJECTS)
1.o : 1.c
2.o : 2.c
3.o : 3.c
lk_517
2006-12-30
打赏
举报
回复
to leehq
用makefile阿
yin0731
2006-12-30
打赏
举报
回复
写MAKEFILE文件
leehq
2006-12-30
打赏
举报
回复
?
leehq
2006-12-30
打赏
举报
回复
lk_517(风雷,http://likunarmstrong.googlepages.com/home) ( )
SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
---------------------------------------------------------
这样怎么设定编译的语句?
难道这样:
gcc -c $(SOURCES) -o $(OBJS)
好像不通啊?
lk_517
2006-12-30
打赏
举报
回复
SOURCES = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SOURCES))
leehq
2006-12-29
打赏
举报
回复
难道只能将文件名都打上吗?
不能用"*.c"这类的语法?
duchuanying
2006-12-29
打赏
举报
回复
.c.o:
gcc -c $< -o output/$@
就可以了呀!
对于每个.c都执行 gcc 1.c -o output/1.o
加载更多回复(22)
GCC
-o 选项 (
指定
输出
文件
)
GCC
-o 选项 (
指定
输出
文件
)
GCC
-o 选项用来
指定
输出
文件
。 [infile] -o [outfile] [infile] 表示输入
文件
(需要处理的
文件
),可以是源
文件
,也可以是汇编
文件
或者是
目标
文件
。 [outfile] 表示
输出
文件
(处理的结果),可以是预处理
文件
、
目标
文件
、可执行
文件
等。 [infile] 和 [outfile] 可以是一个
文件
,也可以是一组
文件
。 如果 [infile] 是一组
文件
,表示有多个输入
文件
。 如果 [outfile] 是一组
文件
,表示有多个
输出
文件
。
gcc
指定
头
文件
路径及动态链接库路径
gcc
指定
头
文件
路径及动态链接库路径 本文详细介绍了linux 下
gcc
头
文件
指定
方法,以及搜索路径顺序的问题。另外,还总结了,
gcc
动态链接的方法以及路径
指定
,同样也讨论了搜索路径的顺序问题。本文包含了很多的例子,具有很强的操作性,希望读者自己去走一遍。 一.#include #include #include “”先到源
文件
所在
文件
夹去找,然后再到系统
指定
的某些目
Makefile
指定
输出
目录
Makefile
指定
输出
目录
Makefile OBJ = test.o CC =
gcc
OUTPUT_DIR = build excute: @./test test:$(OBJ) $(CC) -o $@ $(OUTPUT_DIR)/$< $(OBJ): %.o: %.c $(OUTPUT_DIR) $(CC) -c $< -o $(OUTPUT_DIR)/$@ $(OUTPUT_DIR): mkdir $(OUTPUT_DIR) .PHONY : clean cle
GCC
编译和链接多个
文件
GCC
编译和链接多个
文件
编译多个源代码
文件
会生成多个
目标
文件
,每个
目标
文件
都包含一个源
文件
的机器码和相关数据的符号表。除非使用 -c 选项指示
GCC
只编译不链接,否则
GCC
会使用临时
文件
作为
目标
文件
输出
: $
gcc
-c function_printf.c $
gcc
-c hello_world.c strong@foreverstrong:~/ForeverStrong/hello_world$ ll total 16 drwxrwxr-x 2 strong strong 4096 Se
GCC
输出
带C源代码的汇编
文件
摘要: 使用
GCC
输出
带C源代码的汇编
文件
,这样便于对应着源代码来查看汇编代码 关键字:
GCC
源代码 汇编 使用
GCC
输出
带C源代码的汇编
文件
有两种方式, 第一种方式
gcc
–c –S source.c objdump –S source.o 首先生成带生成
目标
文件
,然后使用objdump命令,显示源代码与汇编代码的混合
文件
这种方式生成的信息较少,但是主要的信息是足够了 第二种方式 使用GNU C Assembler的列表功能来完成,例如:
gcc
–c –g –Wa
C语言
69,381
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章