我在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社区 / 程序开......相关推荐

  1. win怎么在计算机里按日期搜索文件,win10系统如何按指定修改日期搜索文件

    Win10系统搜索文件最主要的当然还是根据名称来搜索,当然也可以给搜索限定一些条件,比如说大小.类型等等,这其中还包括修改时间.本文就来介绍一下系统如何按指定修改日期搜索文件. 1.首先在搜索框中点击 ...

  2. win怎么在计算机里按日期搜索文件,Win8系统如何按指定修改日期搜索文件

    Win8系统搜索文件最主要的当然还是根据名称来搜索,当然也可以给搜索限定一些条件,比如说大小.类型等等,这其中还包括修改时间.本文就来介绍一下Win8系统如何按指定修改日期搜索文件. 1.首先在搜索框 ...

  3. 文件夹重命名,快速修改多个文件夹名称

    文件夹里的面有很多个子文件夹,看着都好复杂,要一个一个的重命名文件夹觉得好难,手动一个一个重命名,学得也是一件很苦恼的事情,别急下面小编教你这个新技巧.一键可操作,下面就让我闪来学习下吧. 准备工具: ...

  4. python文件按时间排序_python按修改时间顺序排列文件的实例代码

    python按修改时间顺序排列文件,具体代码如下所示: import os def sort_file_by_time(file_path): files = os.listdir(file_path ...

  5. mysql 设置表空间位置_如何修改表空间数据文件路径

    如何修改表空间数据文件路径 -- 修改表空间的数据文件路径: -- 5个步骤 -- 1. alter tablespace tbs_name offline; -- 2. 物理拷贝到指定路径[这个很重 ...

  6. matlab读取一个文件的图片大小,Matlab读取文件夹中子文件夹中的图片并修改尺寸...

    今天被师兄问到如何利用matlab批处理图片,觉得很简单嘛 就让他去百度 结果只百度到处理文件夹中图片的程序 好吧 这里放上如何处理文件夹中子文件夹的图片 现状:在一个名为casia的文件夹中,里面有 ...

  7. flask 接口上传文件_Flask干货:Flask数据交换——上传文件

    图 | 源网络文 | 5号程序员01 事情是这样的. 有一天五号程序员打算网购一盒巧克力送给自己的女朋友 想必女朋友收到礼物是这样的: 结果商家邮寄来的巧克力中夹着一张纸条: 害!你说气不气人,现在都 ...

  8. 计算机c盘中用户文件夹内的文件改名,Win10-更改c盘下的用户文件夹名

    当初 不当心用本身名字 做为计算机用户名,后来 许多软件由于 不支持 路径中有中文,致使吃了很多的亏,心疼.... 下面说下怎么更改 c盘下的用户文件夹名.(确定不是简单粗暴的重命名就完事了)html ...

  9. Rockchip RK3588 使用ddrbin_tool 修改DDR loader文件参数

    Rockchip RK3588修改DDR loader文件参数 文章目录 Rockchip RK3588修改DDR loader文件参数 RK3588 DDR变频介绍 DDR参数修改工具ddrbin_ ...

最新文章

  1. IPFS Series -- Bitswap Protocol
  2. python画直方图成绩分析-python plotly绘制直方图实例详解
  3. Python:win32com 模块
  4. 山西省内大学计算机,在山西省哪几所大学的计算机系比较有名
  5. ​模型优化漫谈:BERT的初始标准差为什么是0.02?
  6. 使用 gRPCurl 调试.NET 5的gPRC服务
  7. Linux多线程实践(1) --线程理论
  8. kafka 思维导图
  9. 为什么设计师应该学习编写代码
  10. 忆阻器的matlab建模_忆阻器Simulink建模和图形用户界面设计.PDF
  11. python 编程算法_python语言编程算法
  12. python适用的操作系统是_操作系统先来先服务python
  13. 连接手表_荣耀手表2 一键连接你的手上智慧新生活
  14. java 自己的 pid_Java获取自身PID方法搜集
  15. dcdc转换器计算机显示,DC/DC转换器
  16. ISTA与稀疏编码 both python matlab
  17. 网页设计与制作(HTML+CSS)
  18. IT运维管理之数据维护技术方案
  19. 如何写一个C语言头文件,C语言头文件如何写?.doc
  20. Git 报错 error: pathspec ‘XXX‘ did not match any file(s) known to git 报错解决方法

热门文章

  1. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程...
  2. GraphQL 的前世今生
  3. 将系统分解为微服务的策略
  4. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)
  5. ASP.NET Core 运行原理解剖[3]:Middleware-请求管道的构成
  6. myisam数据表根据frm文件恢复数据表
  7. 【土地评价与土地管理】案例:兰州市榆中县农用地分等
  8. Android之提示Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
  9. linux c之wait和waitpid函数的用法和总结
  10. java之InetAddress类和InetSocketAddress的使用