Makefile 一点一滴(二)—— 输出文件到指定路径
先来看最简单的 makefile 文件:
TestCpp : TestCpp.o
g++ -o TestCpp TestCpp.o TestCpp.o : TestCpp.cpp
g++ -c TestCpp.cpp clean :
rm -rf TestCpp.o
冒号前是要生成的文件,冒号后是该文件所依赖的文件
下一行是生成所需的文件,注意,一定要以Tab开头。
这里,我想将可执行文件置入 ./bin 路径下,二进制 .o 文件置入 ./debug 路径下,源文件 .cpp 置入 ./src 路径下
于是我将其修改为:
TestCpp : ./debug/TestCpp.o
g++ -o TestCpp ./debug/TestCpp.o ./debug/TestCpp.o : ./src/TestCpp.cpp
g++ -c ./src/TestCpp.cpp clean :
rm -rf ./debug/TestCpp.o
,创建好 bin、src、debug 文件夹,重新执行 make,输出:
[@localhost TestCpp]$ ls
bin debug makefile src
[@localhost TestCpp]$ make
g++ -c ./src/TestCpp.cpp
g++ -o TestCpp ./debug/TestCpp.o
g++: ./debug/TestCpp.o
g++: make: *** [TestCpp]
make失败,于是我仅make .o:
[@localhost TestCpp]$ make ./debug/TestCpp.o
g++ -c ./src/TestCpp.cpp
[@localhost TestCpp]$ ls
bin debug makefile src TestCpp.o
[@localhost TestCpp]$
生成 TestCpp.o 成功了,但是却不是在我指定的目录 debug/ 下。
证明 :
./debug/TestCpp.o : ./src/TestCpp.cpp
g++ -c ./src/TestCpp.cpp
这句写的是对的。
在这个地方上困扰了很久,最后才发现,我没有为 .o 指定输出路径,
“ g++ -c ./src/TestCpp.cpp ” 找不到输出.o的路径,正确的写法是:
“ g++ -c -o ./debug/TestCpp.o ./src/TestCpp.cpp ”
修改makefile
【makefile —— 第二个版本】
TestCpp : ./debug/TestCpp.o
g++ -o TestCpp ./debug/TestCpp.o ./debug/TestCpp.o : ./src/TestCpp.cpp
# g++ -c ./src/TestCpp.cpp
g++ -c -o ./debug/TestCpp.o ./src/TestCpp.cpp clean :
rm -rf ./debug/TestCpp.o
并重新执行 make,输出:
[@localhost TestCpp]$ make
g++ -c -o ./debug/TestCpp.o ./src/TestCpp.cpp
g++ -o TestCpp ./debug/TestCpp.o
[@localhost TestCpp]$ ls
bin debug makefile src TestCpp
[@localhost TestCpp]$ ls debug/
TestCpp.o
我们发现,这次输出是对的。执行 ./TestCpp,输出:
[@localhost TestCpp]$ ./TestCpp
Hello C++ Language !
也没有问题。
Makefile 一点一滴(二)—— 输出文件到指定路径的更多相关文章
- flask上传文件到指定路径
flask上传文件到指定路径 项目结构如下: 首先是:视图函数uload_file.py,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- fro ...
- 利用TCP 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈
首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...
- SQL语句还原数据库并移动文件到指定路径
用SQL语句还原数据库时如果不指定数据库文件的存储路径,则默认把数据文件和日志文件存放到与原数据库相同的文件路径中,这样可能会产生错误,比如执行下面的语句: restore database Smar ...
- 利用Socket 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈
首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...
- [Linux] 输出文件的指定行
1.获取第k行(以k=10为例) 要注意的是,如果文件包含内容不足10行,应该不输出. # Read from the file file.txt and output the tenth line ...
- ASP.NET解压zip文件,并将解压后的文件放到指定路径中
本文链接:https://www.cnblogs.com/yifeixue/p/11769905.html 本人已亲测有效(*^▽^*) 废话不多说了,直接上代码: 1 /// <summary ...
- ls命令输出文件的绝对路径
find $PWD | xargs ls -ld 再结合 grep 筛选
- Oracle RMAN 恢复控制文件到指定的路径
Oracle 数据库通过RMAN恢复控制文件到指定的路径 --------------------------------------------------------- 先查询备份集信息,再指定备 ...
- windows上python上传下载文件到linux服务器指定路径【转】
从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...
随机推荐
- LINQ之路 8: 解释查询(Interpreted Queries)
LINQ提供了两个平行的架构:针对本地对象集合的本地查询(local queries),以及针对远程数据源的解释查询(Interpreted queries). 在讨论LINQ to SQL等具体技术 ...
- 1003. Emergency (25)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- ES6的Iterator,jquery Fn
ES6的Iterator对象详解 Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指 ...
- latex 竖排子图的生成
latex命令如下: 需要的包为: \usepackage{graphicx} \usepackage{subfigure} \begin{figure*}%加*的作用是跨栏(双栏和单栏latex的区 ...
- 剔除eclipse的configuration目录[转]
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- ==与equals的区别
==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致.两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容.pu ...
- node.js + webstorm :配置开发环境
一.配置开发环境: 1.先安装node (1).访问http://nodejs.org打开安装包,正常安装,点击next即可. 为了测试是否安装成功,打开命令提示符,输入node,则进入node.js ...
- JAVA OO 第二章知识点
一.JAVA的基础语法 1.关键字 ①关键字:关键字用于定义该门语言,且这些单词对编译器用特殊的含义,而且不能作为标识符. 2.标识符 标识符:在JAVA中我们备选的单词,包括:类名.方法名.字段.变 ...
- 关于MySql has gone away问题的解决
everybody 是否导入数据库的时候 导的导的 就会出现这个错误呢,这个错误的原因是你的数据库有点大,数据有点多,导入时间过长与服务器失去连接了,让我们看下咋解决把. 如果用的是xampp 修改m ...
- Mac OS 下 mysql 找不到 mysql.sock 的问题
mysql.sock 无法找到一般存在两种问题,一是mysql服务未启动,mysql.sock没有生成,二是mysql.sock的指向位置出错,在指向位置加个mysql.sock的软链接就可以解决. ...