社区
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
不能一条命令就搞定吗?
...全文
6607
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
只编译不链接,否则
GCC
会使用临时
文件
作为
目标
文件
输出
: $
gcc
-c main.c $
gcc
-c func.c 这些命令会在当前
目录
中生成两个
目标
文件
,分别是 main.o 和 func.o。把两个源
文件
名放在同一个
GCC
命令中,也可以获得同...
C语言
70,006
社区成员
243,256
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章