linux下开发c++第二弹--helloworld与makefile
一:hello world
sudo vim hello.cpp

输入 g++ -o hello hello.cpp 获得hello
输入 ./hello 运行,显示结果hello world! , ./表示在同一目录下。
二,makefile
1、基本的make
makefile编写据传闻应该是linux环境开发者必备技能,本人小白,暂时写一点儿练习时使用的,以后如果有其他改进另行添加。另外,网上密密麻麻的复制粘贴的“如果一个项目有3个头文件,8个c文件”的教程,虽然不知道原作者是谁,但是慢慢琢磨和学习,这个教程本身还是很不错的,依然是helloworld,虽然并不用这么麻烦,作为练习还是写了一个makefile
sudo vim makefile

当前目录控制台输入: make 之后会在控制台打印出make文件中的命令行
多出来hello 和 hello.o两个文件
执行:./hello 结果 :hello world!
执行:make clean 结果 :删除.o扩展名的文件
由此我们看出,hello为最终结果,而.o都是一些中间代码,格式自上而下进行:
目标名: 依赖文件
(tab)命令输入
这里需要强烈注意的是:命令前必须有一个tab而不是四格空格。因为根据规则可以知道,在执行make时,系统会认为tab之后的是一个可执行的命令行,所以make文件其余地方对其或者其他处理请不要用tab,同时vim很多人下载的网上大神配置好的vim中会有空格替代tab的设定,可以通过在个人目录的.vimrc.local(每个人的可能不一样的文件)中输入 set noexpandtab 解决这个问题。此外,有教程说makefile文件的冒号前后必须空格,可能根据不同的规范要求吧,并没有tab这样一旦不照做崩盘的情况出现。
2、命名为makefile是因为make会自动识别当前目录下的文件,命名为makefile,Makefile据说都可以。
如果命名为其他的文件,同时还要make的话输入命令行
make -f 文件名
如果需要执行make中的clean命令,输入命令行
make -f 文件名 clean
3,强大的省略功能(缩写简化)
这一部分因为我还没有用到太复杂的功能,充其量也就是两个cpp一个h这样的文件组合进行测试,所以以下为假设:
如果我们的main由很多中间代码合成,我们正常情况

如果这么书写那么一定会出很大问题,尤其是大项目的内容更多,改着改着没准眼一花就写错了各地方,然后各种崩盘。所以我们可以用声明变量的方法,将重复的而且过长的子串提取出来。看上去整洁了不少的样子,修改的时候问题也会简化

另外就是makefile的推导功能,这个还是比较喜欢的,因为小白经常gcc g++ -c -o什么的感觉乱糟糟,所以借鉴了之前的那篇经典教程,gnu是可以自动推导判断出你到底想要什么,如果目标是half.o那么make就会寻找到half.c或者cpp之类的作为依赖,这时候只需要填写half.o所需要的其他的内容,比如.h文件,如下图所示两种效果相同。表示本人暂时没接触到也并不喜欢如果多个.o文件依赖同一.h文件进行缩写的那种,因为缺乏了美感和层次感。

linux下开发c++第二弹--helloworld与makefile的更多相关文章
- linux下开发c第一弹--相关环境需求
我用的是mac,mac和linux一般集成了一定的开发环境,基本上需要gcc.vim.gdb之类的,linux下需要apt-get,mac下homebrew的brew install都可以解决问题.同 ...
- 使用eclipse在linux下开发C/C++
一直在Linux下开发,苦于没有IDE,一般都是自己编写Makefile,然后在windows下用文本编辑器ftp打开文件编辑,然后在linux下完成编译.调试代码也只能是命令行用gdb进行调试,相当 ...
- linux下开发C语言需要安装的manpages手册
linux下开发C代码需要安装的manpages: $ sudo apt-get install manpages$ sudo apt-get install manpages-dev$ sudo a ...
- Linux下开发STM32单片机
一开始学习51单片机就是用的MDK这个IDE软件,IDE软件虽然看起来直观好像更加容易入门(因为有界面看起来很形象),但是实际上IDE却是向我们这些入门人员隐藏了背后真实存在的过程,让我们以为编译就是 ...
- linux下开发板网络速度测试记录
由于做的项目对于网络和USB的读写速度有很高的要求,因此新拿回来的板子要测试网络和usb的最佳传输速度.要考虑不少因素,先把我能想到的记录下来. 测试的环境是开发板和ubuntu虚拟机 ...
- 05 Linux下开发JSP项目(Hello world)
测试环境: 主机系统:Win 7 虚拟机:VMware workstation 11.1.0 虚拟机OS: centos 6.5 64位 Kernel 2.6.32-431-e16.x86_64 My ...
- wxWidgets 在 Linux 下开发环境配置
本文基于 CodeBlocks (16.0.1) 和 wxWidgets (3.0.2) 搭建 Linux 下 GUI 开发环境. 1. 安装 CodeBlocks Ubuntu 默认的源当前 Cod ...
- linux下开发,解决cocos2d-x中编译出现的一个小问题, undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
解决cocos2d-x中编译出现的一个小问题 对于cocos2d-x 2.×中编译中,若头文件里引入了#include "cocos-ext.h",在进行C++编译的时候会遇到例如 ...
- Linux下开发环境的搭建(For C++ OIer)
说句实话,对于OIer来说,Linux真的是个很好的开发平台. 这里既没有游戏的喧嚣,也没有广告的打扰,gcc/g++早已预装,一切已为你准备好......(???)即使对于日常使用,也绰绰有余. 如 ...
随机推荐
- org.hibernate.PersistentObjectException: detached entity passed to persist异常
再用jpa+spring+struts2开发的是时候遇到一个问题(采用了注解的方式,xml配置的道理是一样的),当我在注册用户的时候,注册第一个用户没有问题,但注册第二个用户开始就会抛出一个异常: j ...
- ios中addtarget的用法
1.addtarget 的.部分使用事件没有直接的操作方式,需要进行调用.就要用addTarget. - (void)setupCustomView { self.customView = [[CHV ...
- Ubuntu下jdk配置
在Oracle官网下载linux版本的以tar.gz结尾的jdk建立文件夹用来存放解压后的jdksudo mkdir /usr/java进入jdk下载文件夹,解压并存放jdksudo tar zxvf ...
- ruby安装插件报错
有时候我们需要安装ruby插件的时候,会报如下错误: ERROR: Could not find a valid gem 'rdiscount' (>= 0), here is why: Un ...
- hdu4576 概率dp n^2的矩阵
这个题目看网上好多题解都是直接O(n*m)卡过.我是这么做的. 对于m次操作,统计每个w的次数.然后对每个w做矩阵乘法. 这样直接做矩阵乘法是会TLE的. 又由于这里的矩阵很特殊,一次乘法可以降维成O ...
- iOS开发:Swift多线程NSOperation的使用
介绍: NSOperation是基于GCD实现,封装了一些更为简单实用的功能,因为GCD的线程生命周期是自动管理,所以NSOperation也是自动管理.NSOperation配合NSOperatio ...
- MySQL Timeout解析
“And God said, Let there be network: and there was timeout”在使用MySQL的过程中,你是否遇到了众多让人百思不得其解的Timeout?那么这 ...
- crtbegin_dynamic.o: No such file: No such file or directory
/homesec/android2/zhangbin/053work3/hi050src/HiSTBAndroidV400R001C00SPC050B012/prebuilt/linux-x86/to ...
- Java [Leetcode 337]House Robber III
题目描述: The thief has found himself a new place for his thievery again. There is only one entrance to ...
- Delphi打开窗体时报"Corrupt Portfolio Stream"
今天在打开一个Delphi窗体时报了这么一个错误: Corrupt Portfolio Stream 查了一下,主要是由于Delphi窗体的*.ddp文件损坏引起的. 解决方法: 删除.ddp 文 ...