先来看最简单的 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 一点一滴(二)—— 输出文件到指定路径的更多相关文章

  1. flask上传文件到指定路径

    flask上传文件到指定路径 项目结构如下: 首先是:视图函数uload_file.py,代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- fro ...

  2. 利用TCP 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈

    首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...

  3. SQL语句还原数据库并移动文件到指定路径

    用SQL语句还原数据库时如果不指定数据库文件的存储路径,则默认把数据文件和日志文件存放到与原数据库相同的文件路径中,这样可能会产生错误,比如执行下面的语句: restore database Smar ...

  4. 利用Socket 客户端---->服务端 传送文件到指定路径,并返回一个友好的回馈

    首先盲写的一个传输文件的方法,但测试发现了一个非常不容易发现的问题,这里先说明一下. 错误的代码如下: package com.TCP.java; import java.io.File; impor ...

  5. [Linux] 输出文件的指定行

    1.获取第k行(以k=10为例) 要注意的是,如果文件包含内容不足10行,应该不输出. # Read from the file file.txt and output the tenth line ...

  6. ASP.NET解压zip文件,并将解压后的文件放到指定路径中

    本文链接:https://www.cnblogs.com/yifeixue/p/11769905.html 本人已亲测有效(*^▽^*) 废话不多说了,直接上代码: 1 /// <summary ...

  7. ls命令输出文件的绝对路径

    find $PWD | xargs ls -ld 再结合 grep 筛选

  8. Oracle RMAN 恢复控制文件到指定的路径

    Oracle 数据库通过RMAN恢复控制文件到指定的路径 --------------------------------------------------------- 先查询备份集信息,再指定备 ...

  9. windows上python上传下载文件到linux服务器指定路径【转】

    从windows上传文件到linux,目录下的文件夹自动创建 #!/usr/bin/env python # coding: utf-8 import paramiko import datetime ...

随机推荐

  1. 搞清css的单位 px,em,rem的区别

    前言:现在上大街一眼望去,基本上90%的人都拿着手机,走路,逛街,吃东西都不停着,所以对于我们这种前端开发的程序猿来说,让网页适应于移动端可以说是必须要满足的.所以最近也是一直在学习和实践.然后就接触 ...

  2. [转] HashMap的存取之美

    本文转自 http://www.nowamagic.net/librarys/veda/detail/1202 HashMap是一种十分常用的数据结构,作为一个应用开发人员,对其原理.实现的加深理解有 ...

  3. 让PHP开发者事半功倍的十大技巧

    如果你使用一面大镜子作为冲浪板会发生什么?或许你会在较短的时间内征服海浪,但是你肯定从内心深处明白,这不是冲浪的正确选择.同样的道理也适用于PHP编程,尽管这样的类比听起来有一些古怪.我们经常听到有人 ...

  4. TestNG Study Note 1 - Eclipse 插件安装

    TestNG 插件在线安装 Help -> Install New Software -> Add -> Paste TestNG url to Add:  http://testn ...

  5. iOS 调试问题汇总

    // PBXcp error修复-No such file or directory (2013-05-02 15:20:50) 差不多算是Xcode比较常见的一个编译错误了,原因往往是添加或删除美术 ...

  6. Redis教程(二):String数据类型

    一.概述: 字符串类型是Redis中最为基础的数据存储类型,它在Redis中是二进制安全的,这便意味着该类型可以接受任何格式的数据,如JPEG图像数据或Json对象描述信息等.在Redis中字符串类型 ...

  7. mysql mybatis-generator plugin 有page实体类的分页

    page实体类 package cn.zsmy.tmp; import java.io.Serializable; /** * 分页对象. * */public final class Page im ...

  8. ubuntu14.04 Hadoop单机开发环境搭建MapReduce项目

    Hadoop官网:http://hadoop.apache.org/ 目前最新的版本是Hadoop 3.0.0-alpha1前提:java 1.6 版本以上 首先从官网下载压缩包(hadoop-3.0 ...

  9. SQL Server 2012 联机丛书离线安装

    昨日根据微软官网的方式安装SQL Server 2012 联机丛书报错,无法安装: 联机丛书下载位置及安装方式: 按照给出的方式安装,无法完成,错误如下:

  10. Toolbar设置回退箭头的方法

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //关键下面两句话,设置了回 ...