makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......
我在Linux下编成时,用Makefile文件生成的.o文件老是跟我的源文件在同一个目录下,搞得我用TAB键之余还得先再敲.c再TAB,为什么要多敲两次键盘?如果我把所有生成的.o文件放比如./obj目录下,岂不是少来很多麻烦?而且ls时免得见到那么多垃圾多好?!
谁愿意牺牲自己来帮忙搞定?我愿意提供100大洋来奖励!
比如我再./src下面有10个源文件(.cpp),再./include下有很多头文件,我想在./src下编译的obj文件(.o文件)放到./obj下。该如何?
要求:
1、别告诉我在每一个gcc -c后面来一个mv指令
2、如果我已经编译过一次,后来我修改了一个文件,那么应该也只编译一个文件
问题点数:100、回复次数:9Top
1 楼future_path(放眼未来)回复于 2003-04-15 18:38:19 得分 10
不知你是用什么生成Makefile文件的。我以前用过tmake,先写一个.pro文件,然后用tmake生成Makefile。pro文件里有一个选项OBJDIR,修改它就可以改变目标文件的存放路径了。
建议你去下载一个tmake看一下,有什么问题在写出来大家讨论。Top
2 楼hs_guanqi(关七)回复于 2003-04-15 18:42:52 得分 15
你在makefile里面.o文件之前加上路径名就行了,比如../obj/main.o
注意使用-o选项,使得所有目标文件都存在../obj/目录下Top
3 楼alangxy(阿郎)回复于 2003-04-16 13:58:20 得分 25
如楼上所说,给你举个例子先:
假如预编译x.cpp文件
./obj/x.o: ./src/x.cpp
g++ -c ./src/x.cpp -o ./obj/x.oTop
4 楼eion(那个谁)回复于 2003-04-16 15:10:04 得分 0
谢谢各位大哥,你们的方法我知道,而且通过修改我的
http://expert.csdn.net/Expert/topic/1389/1389206.xml?temp=.1599237
上面的代码也可以完成,不过我是想偷一下懒:每次不创建一个工程时不需要修改太多的信息。不如下面的Makefile文件:
PROJECT=abc
SYSLIB=-lpthread
CFLAG=-g
CXXFLAG=
CC=gcc
GCC=gcc
SOURCES=$(wildcard *.cpp)
OBJECTS=$(patsubst %.cpp,%.o,$(SOURCES))
$(PROJECT):$(OBJECTS)
$(GCC) -o $@ $(OBJECTS) $(CFLAG) $(SYSLIB)
.cpp.o:
$(GCC) -c $< $(CXXFLAG)
clean:
rm -rf *.o $(PROJECT)
这个不需要做任何修改,就可以拷贝到任何C目录下编译(当然要求所有的cpp文件在同一目录下)
后来我做了一点改动,也就是:
$(GCC) -o $@ $(OBJECTS) $(CFLAG) $(SYSLIB)
改为:
$(GCC) -o $@ @(patsubst %.o,./obj/%.o,$^) $(CFLAG) $(SYSLIB)
$(GCC) -c $< $(CXXFLAG)
改为:
$(GCC) -c $< $(CXXFLAG) -o ./obj/$(patsubst %.cpp,%.o,$
它确实可以将编译好的.o连接文件给我放到./obj下。但是不过何时编译它都编译所有文件。
请各位大哥再给出明确指示。将感激不禁!!!
-----------------------------
我是一个懒人,不要责备我连这点事情都不愿意去做。
不过我相信:
是懒人在促进世界的发展!!Top
5 楼honix()回复于 2003-04-16 15:19:11 得分 20
OBJDIR=obj
OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c))
all : $(OBJS)
$(OBJDIR)/%.o : %.c
cc -o $@ $<
Top
6 楼tiejun(21世纪牛顿)回复于 2003-04-16 15:32:14 得分 0
还是用专门工具来做这些吧,把自己从这些低级手工劳作中解放出来吧!Top
7 楼eion(那个谁)回复于 2003-04-16 17:39:54 得分 0
honix(春眠醒不了) :
好,不过还是解决不了每次都编译所有的问题Top
8 楼honix()回复于 2003-04-16 18:26:58 得分 30
不可能吧,看看我机器上测试过程:
[root@galileo tmp]# ls
Makefile obj readpci.c
[root@galileo tmp]# cat Makefile
OBJDIR=obj
OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(wildcard *.c))
all : $(OBJS)
$(OBJDIR)/%.o : %.c
cc -o $@ $<
[root@galileo tmp]# make
cc -o obj/readpci.o readpci.c
[root@galileo tmp]# make
make: Nothing to be done for `all'.
[root@galileo tmp]#
Top
9 楼eion(那个谁)回复于 2003-04-17 09:40:32 得分 0
谢谢!总算找到问题了。
很不好意思,我将原来的Makefile备份成makefile,我想Linux是区分大小写的,所以就没有在意。后来我突然发现我的Makefile有语法问题,但是make时确没有给我错误。于是就怀疑到makefile上,将makefile移走,再make就OK了
我将Makefile改写成下面的形式:
PROJECT=abc
MYLIB=
SYSLIB=
CFLAG=-g
CC=gcc
GCC=gcc
OBJDIR=./obj
SRCS=$(wildcard *.cpp)
OBJS=$(patsubst %.cpp,$(OBJDIR)/.o,$(SRCS))
$(PROJECT):$(OBJS)
$(GCC) -o $@ $^ $(CFLAG) $(SYSLIB) $(MYLIB)
$(OBJDIR)/%.o:%.cpp
$(GCC) -c -o $@ $<
clean:
rm -f $(OBJDIR)/*.o $(PROJECT)
这样每次只需要将Makefile拷贝到相应的源文件下面,并再源文件的路径处建立一个obj目录,这样每次Makefile就将产生的目标文件放到obj目录下,而不会烦你了。
谢谢honix(春眠醒不了)
等几天再结贴吧,让大家也看看
makefile obj文件路径_Makefile一问:如何修改.o输出文件的输出路径 Linux/Unix社区 / 程序开......相关推荐
- win怎么在计算机里按日期搜索文件,win10系统如何按指定修改日期搜索文件
Win10系统搜索文件最主要的当然还是根据名称来搜索,当然也可以给搜索限定一些条件,比如说大小.类型等等,这其中还包括修改时间.本文就来介绍一下系统如何按指定修改日期搜索文件. 1.首先在搜索框中点击 ...
- win怎么在计算机里按日期搜索文件,Win8系统如何按指定修改日期搜索文件
Win8系统搜索文件最主要的当然还是根据名称来搜索,当然也可以给搜索限定一些条件,比如说大小.类型等等,这其中还包括修改时间.本文就来介绍一下Win8系统如何按指定修改日期搜索文件. 1.首先在搜索框 ...
- 文件夹重命名,快速修改多个文件夹名称
文件夹里的面有很多个子文件夹,看着都好复杂,要一个一个的重命名文件夹觉得好难,手动一个一个重命名,学得也是一件很苦恼的事情,别急下面小编教你这个新技巧.一键可操作,下面就让我闪来学习下吧. 准备工具: ...
- python文件按时间排序_python按修改时间顺序排列文件的实例代码
python按修改时间顺序排列文件,具体代码如下所示: import os def sort_file_by_time(file_path): files = os.listdir(file_path ...
- mysql 设置表空间位置_如何修改表空间数据文件路径
如何修改表空间数据文件路径 -- 修改表空间的数据文件路径: -- 5个步骤 -- 1. alter tablespace tbs_name offline; -- 2. 物理拷贝到指定路径[这个很重 ...
- matlab读取一个文件的图片大小,Matlab读取文件夹中子文件夹中的图片并修改尺寸...
今天被师兄问到如何利用matlab批处理图片,觉得很简单嘛 就让他去百度 结果只百度到处理文件夹中图片的程序 好吧 这里放上如何处理文件夹中子文件夹的图片 现状:在一个名为casia的文件夹中,里面有 ...
- flask 接口上传文件_Flask干货:Flask数据交换——上传文件
图 | 源网络文 | 5号程序员01 事情是这样的. 有一天五号程序员打算网购一盒巧克力送给自己的女朋友 想必女朋友收到礼物是这样的: 结果商家邮寄来的巧克力中夹着一张纸条: 害!你说气不气人,现在都 ...
- 计算机c盘中用户文件夹内的文件改名,Win10-更改c盘下的用户文件夹名
当初 不当心用本身名字 做为计算机用户名,后来 许多软件由于 不支持 路径中有中文,致使吃了很多的亏,心疼.... 下面说下怎么更改 c盘下的用户文件夹名.(确定不是简单粗暴的重命名就完事了)html ...
- Rockchip RK3588 使用ddrbin_tool 修改DDR loader文件参数
Rockchip RK3588修改DDR loader文件参数 文章目录 Rockchip RK3588修改DDR loader文件参数 RK3588 DDR变频介绍 DDR参数修改工具ddrbin_ ...
最新文章
- IPFS Series -- Bitswap Protocol
- python画直方图成绩分析-python plotly绘制直方图实例详解
- Python:win32com 模块
- 山西省内大学计算机,在山西省哪几所大学的计算机系比较有名
- ​模型优化漫谈:BERT的初始标准差为什么是0.02?
- 使用 gRPCurl 调试.NET 5的gPRC服务
- Linux多线程实践(1) --线程理论
- kafka 思维导图
- 为什么设计师应该学习编写代码
- 忆阻器的matlab建模_忆阻器Simulink建模和图形用户界面设计.PDF
- python 编程算法_python语言编程算法
- python适用的操作系统是_操作系统先来先服务python
- 连接手表_荣耀手表2 一键连接你的手上智慧新生活
- java 自己的 pid_Java获取自身PID方法搜集
- dcdc转换器计算机显示,DC/DC转换器
- ISTA与稀疏编码 both python matlab
- 网页设计与制作(HTML+CSS)
- IT运维管理之数据维护技术方案
- 如何写一个C语言头文件,C语言头文件如何写?.doc
- Git 报错 error: pathspec ‘XXX‘ did not match any file(s) known to git 报错解决方法
热门文章
- 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
- GraphQL 的前世今生
- 将系统分解为微服务的策略
- 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
- ASP.NET Core 运行原理解剖[3]:Middleware-请求管道的构成
- myisam数据表根据frm文件恢复数据表
- 【土地评价与土地管理】案例:兰州市榆中县农用地分等
- Android之提示Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
- linux c之wait和waitpid函数的用法和总结
- java之InetAddress类和InetSocketAddress的使用