我使用过的Linux命令之make - 强大的编译工具

我使用过的Linux命令之make - 强大的编译工具

本文链接:http://codingstandards.iteye.com/blog/969924   (转载请注明出处)

 

用途说明

make命令是一个常用的编译命令,尤其是在开发C/C++程序时,它通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译。Makefile文件是按照规定的格式编写的,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。在首次执行make时,会将所有相关的文件都进行编译,而在以后make时,通常是进行增量编译,即只对修改过的源代码进行编译。许多Tarball格式的开源软件,在解压之后,一般先执行./configure,然后执行make,再执行make install进行安装。在进行Java编译时,我们常用的是ant,这个ant工具的发明乃是由于James被makefile的特殊格式弄烦了,采用XML格式来描述任务之间的关系,但是ant工具借鉴了make工具的做法这是肯定的。

man make 写道
The purpose of the make utility is to determine automatically which pieces of a large program need to be recom-
piled, and issue the commands to recompile them. The manual describes the GNU implementation of make, which
was written by Richard Stallman and Roland McGrath, and is currently maintained by Paul Smith. Our examples
show C programs, since they are most common, but you can use make with any programming language whose compiler
can be run with a shell command. In fact, make is not limited to programs. You can use it to describe any
task where some files must be updated automatically from others whenever the others change.

To prepare to use make, you must write a file called the makefile that describes the relationships among files
in your program, and the states the commands for updating each file. In a program, typically the executable
file is updated from object files, which are in turn made by compiling source files.

Once a suitable makefile exists, each time you change some source files, this simple shell command:

make

suffices to perform all necessary recompilations. The make program uses the makefile data base and the last-
modification times of the files to decide which of the files need to be updated. For each of those files, it
issues the commands recorded in the data base.

make executes commands in the makefile to update one or more target names, where name is typically a program.
If no -f option is present, make will look for the makefiles GNUmakefile, makefile, and Makefile, in that
order.

Normally you should call your makefile either makefile or Makefile. (We recommend Makefile because it appears
prominently near the beginning of a directory listing, right near other important files such as README.) The
first name checked, GNUmakefile, is not recommended for most makefiles. You should use this name if you have a
makefile that is specific to GNU make, and will not be understood by other versions of make. If makefile is
‘-’, the standard input is read.

make updates a target if it depends on prerequisite files that have been modified since the target was last
modified, or if the target does not exist.

使用make进行编译的关键点就是掌握makefile的编写规则,make的手册页中说道,makefile文件可以是GNUmakefile, makefile或者Makefile,但是推荐使用Makefile,因为在列出某个目录的文件时,使用Makefile作为文件名时将被排在前面。makefile文件也像C/C++代码一样支持include方式,即把一些基本的依赖规则写在一个公共的文件中,然后其他makefile文件包含此文件。我所使用的公共makefile文件名为common.mk,是多年以前从一个高人那儿拷贝而来的,现在贡献给大家。里面有些晦涩难懂的makefile指令,但是对于使用者来说可以不必关注。思路就是将makefile所在目录的源程序找出来,然后按照依赖关系进行编译。

common.mk 写道
#This is the common part for makefile

SOURCE := $(wildcard *.c) $(wildcard *.cc) $(wildcard *.cpp)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(patsubst %.cpp,%.o,$(SOURCE))))
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
CPPFLAGS += -MD

.PHONY : everything objs clean veryclean vc rebuild ct rl

everything : $(TARGETS)

objs : $(OBJS)

clean :
@$(RM) *.o
@$(RM) *.d

veryclean: clean
@$(RM) $(TARGETS)
@$(RM) cscope.out
@$(RM) core*

vc: veryclean

ct:
@$(RM) $(TARGETS)

rl: ct everything

rebuild: veryclean everything

ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM) $(patsubst %.d,%.o,$@)
endif

-include $(DEPS)

怎么来使用这个common.mk来帮助我们编写makefile文件呢,首先我们来看一下编译成静态库的情况。见下面文件,其中的libhyfcd.a就是目标静态库文件的名称,INCS定义了依赖的包含文件路径。

makefile 写道
TARGETS = $(BIN1)

BIN1 = libhyfcd.a
BIN1_OBJS = $(OBJS)
BIN1_LIBS =
BIN1_LFLAGS =
INCS = -I.. -I../../hycu2 -I/usr/include/mysql

#CC := g++
CC := gcc
CXX := gcc
CFLAGS := -g $(INCS) -Wall -D_REENTRANT -D__DECLSPEC_SUPPORTED -DOPENSSL_NO_KRB5 #-DNDEBUG
CXXFLAGS := $(CFLAGS)

include common.mk

# $(BIN1) : $(BIN1_OBJS)
# $(CC) -g -o $@ $(BIN1_LFLAGS) $^ $(addprefix -l,$(BIN1_LIBS))

$(BIN1): $(BIN1_OBJS)
ar rcs $@ $^

再来看一下编译成可执行文件的情况。见下面文件,其中msgc就是目标执行文件,BIN1_LIBS是依赖的库。

写道
TARGETS = $(BIN1)

BIN1 = msgc
BIN1_OBJS = $(OBJS)
BIN1_LIBS = curses pthread
BIN1_LFLAGS = #-L../hyfc/lib
INCS = #-I../hyfc

CC := g++
CFLAGS := -g $(INCS) -Wall
#CFLAGS := -g $(INCS) -Wall -DLOG_CHECK
#CFLAGS := -g $(INCS) -Wall #-DNDEBUG
CXXFLAGS := $(CFLAGS)

include /usr/include/hyfc/common.mk

$(BIN1) : $(BIN1_OBJS)
$(CC) -g -o $@ $(BIN1_LFLAGS) $^ $(addprefix -l,$(BIN1_LIBS))

 

补充(2011.08.07):列位看官,如果你关注的是Makefile的语法结构,那么不妨看参考资料【5】《GNU make中文手册》。

 

常用参数

格式:make

使用默认的makefile文件进行编译,按照GNUmakefile, makefile和Makefile的顺序进行查找。编译目标all。

 

格式:make -f makefile.debug

使用指定的makefile进行编译,此处就是makefile.debug。编译目标all。

 

格式:make install

编译目标install。通常用于安装软件。

 

格式:make clean

编译目标clean。通常用于清除目标文件.o。

 

格式:make veryclean

编译目标clean。通常用于清除目标文件.o以及执行文件等,意思是干净的清除掉除makefile和源程序之外的文件。

 

 

格式:make rl

编译目标rl。rl是relink的缩写,即重新链接,常用于某个依赖的库文件发生变化时强制重新链接生成执行文件。

 

使用示例

示例一 编译安装mysql++2.3.2的过程

[root@jfht setup]# ls mysql++-2.3.2.tar.gz
mysql++-2.3.2.tar.gz
[root@jfht setup]# tar zxf mysql++-2.3.2.tar.gz
[root@jfht setup]# cd mysql++-2.3.2
[root@jfht mysql++-2.3.2]# ./configure --prefix=/usr
checking build system type... i686-pc-linux-gnu
checking host system type... i686-pc-linux-gnu
checking target system type... i686-pc-linux-gnu
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ANSI C... none needed
checking for ranlib... ranlib
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln -s works... yes
checking whether make sets $(MAKE)... yes
checking for ar... ar
checking for strip... strip
checking for nm... nm
checking if make is GNU make... yes
checking for dependency tracking method... gcc
checking for gcc... (cached) gcc
checking whether we are using the GNU C compiler... (cached) yes
checking whether gcc accepts -g... (cached) yes
checking for gcc option to accept ANSI C... (cached) none needed
checking how to run the C preprocessor... gcc -E
checking for egrep... grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking zlib.h usability... yes
checking zlib.h presence... yes
checking for zlib.h... yes
checking for gzread in -lz... yes
checking whether -lm is needed to use C math functions... no
checking whether -lsocket is needed... no
checking whether -lnsl is needed... no
checking for MySQL library directory... /usr/lib
checking for MySQL include directory... /usr/include/mysql
checking for mysql_store_result in -lmysqlclient... yes
checking for mysql_ssl_set in -lmysqlclient... yes
checking for localtime_r()... yes
checking for main in -lintl... no
checking for g++... g++
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for STL slist extension... <ext/slist>, namespace __gnu_cxx
configure: creating ./config.status
config.status: creating Makefile
config.status: creating mysql++.spec
config.status: creating lib/Doxyfile
config.status: creating lib/mysql++.h
config.status: creating config.h
[root@jfht mysql++-2.3.2]# make && make install

此处省略较多输出。

/usr/bin/install -c -d /usr/lib
/usr/bin/install -c -m 644 libmysqlpp.so /usr/lib
/usr/bin/install -c libmysqlpp.so.2.3.2 /usr/lib
(cd /usr/lib ; rm -f libmysqlpp.so libmysqlpp.so.2; ln -s libmysqlpp.so.2.3.2 libmysqlpp.so.2; ln -s libmysqlpp.so.2 libmysqlpp.so)
/usr/bin/install -c -d /usr/include/mysql++
(cd . ; /usr/bin/install -c -m 644  lib/*.h /usr/include/mysql++)
[root@jfht mysql++-2.3.2]#

 

示例二 使用common.mk进行编译的例子

[root@jfht src]# make
make: Nothing to be done for `everything'.
[root@jfht src]# make clean
[root@jfht src]# make
g++ -g  -Wall  -MD  -c -o compiler.o compiler.cpp
g++ -g  -Wall  -MD  -c -o file_updater.o file_updater.cpp
g++ -g  -Wall  -MD  -c -o file_util.o file_util.cpp
g++ -g  -Wall  -MD  -c -o gen_async.o gen_async.cpp
g++ -g  -Wall  -MD  -c -o gen_c.o gen_c.cpp
g++ -g  -Wall  -MD  -c -o gen_cpp.o gen_cpp.cpp
g++ -g  -Wall  -MD  -c -o gen_fmdo2.o gen_fmdo2.cpp
g++ -g  -Wall  -MD  -c -o gen_fmdo.o gen_fmdo.cpp
g++ -g  -Wall  -MD  -c -o gen_hyfc.o gen_hyfc.cpp
g++ -g  -Wall  -MD  -c -o gen_hyfcw.o gen_hyfcw.cpp
g++ -g  -Wall  -MD  -c -o gen_java.o gen_java.cpp
g++ -g  -Wall  -MD  -c -o gen_jdom.o gen_jdom.cpp
g++ -g  -Wall  -MD  -c -o gen_jt.o gen_jt.cpp
g++ -g  -Wall  -MD  -c -o gen_jxh.o gen_jxh.cpp
g++ -g  -Wall  -MD  -c -o gen_pas.o gen_pas.cpp
g++ -g  -Wall  -MD  -c -o gen_php.o gen_php.cpp
g++ -g  -Wall  -MD  -c -o gen_struts.o gen_struts.cpp
g++ -g  -Wall  -MD  -c -o gen_tag.o gen_tag.cpp
g++ -g  -Wall  -MD  -c -o gen_udpsw.o gen_udpsw.cpp
g++ -g  -Wall  -MD  -c -o gen_wsdl.o gen_wsdl.cpp
g++ -g  -Wall  -MD  -c -o gen_xml.o gen_xml.cpp
g++ -g  -Wall  -MD  -c -o msgc.o msgc.cpp
g++ -g  -Wall  -MD  -c -o string_util.o string_util.cpp
g++ -g -o msgc  compiler.o file_updater.o file_util.o gen_async.o gen_c.o gen_cpp.o gen_fmdo2.o gen_fmdo.o gen_hyfc.o gen_hyfcw.o gen_java.o gen_jdom.o gen_jt.o gen_jxh.o gen_pas.o gen_php.o gen_struts.o gen_tag.o gen_udpsw.o gen_wsdl.o gen_xml.o msgc.o string_util.o -lcurses -lpthread
cp -af msgc /usr/bin
cp -af msgc msgc.`uname -r`
[root@jfht src]# make rl
g++ -g -o msgc  compiler.o file_updater.o file_util.o gen_async.o gen_c.o gen_cpp.o gen_fmdo2.o gen_fmdo.o gen_hyfc.o gen_hyfcw.o gen_java.o gen_jdom.o gen_jt.o gen_jxh.o gen_pas.o gen_php.o gen_struts.o gen_tag.o gen_udpsw.o gen_wsdl.o gen_xml.o msgc.o string_util.o -lcurses -lpthread
cp -af msgc /usr/bin
cp -af msgc msgc.`uname -r`
[root@jfht src]#

 

问题思考

1. 很多自由软件中使用的Makefile是由autoconf和automake来生成的,怎么使用法?

2. Makefile中一些常见的指令的含义如何?

 

相关资料

【1】LinuxSky Linux平台Makefile文件的编写基础篇
http://www.linuxsky.org/doc/dev/200709/117.html
【2】学习在线 Linux/Unix环境下的make命令详解
http://www.3648.com/article/sort01/sort021/sort086/info-2667.html
【3】鸟哥的Linux私房菜 第二十二章、軟體安裝:原始碼與 Tarball
http://linux.vbird.org/linux_basic/0520source_code_and_tarball.php#make
【4】新浪学园 Linux下Makefile的automake生成全攻略
http://tech.sina.com.cn/s/2004-10-19/1115443045.shtml

【5】GNU make中文手册

http://www.linuxsir.org/main/doc/gnumake/GNUmake_v3.80-zh_CN_html/index.html#content

 

 

返回 我使用过的Linux命令系列总目录

 

手把手教你学 Simulink (1.3)--Simulink 的模块库及其模块介绍 Simulink 提供了丰富的模块库,涵盖了从基本的信号生成和处理到复杂的数学运算和系统建模的各种功能。通过熟悉这些模块库及其模块,你可以更高效地构建和仿真动态系统。 阅读详情

相关推荐

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 858

Linux下makefile 编译项目

3、common.mk:最核心的编译脚本,定义makefile编译规则,并且各个子目录中都用到这个来编译.c文件的编译。都有一个叫做makefile的文件,每个makefile文件,都会包含根目录下的common.mk。2、config.mk:配置脚本,被makefile包含,单独分处理,为了应付一些可变的东西。1、makefile:是咱们编译项目的入口脚本,编译项目从这里开始,起总体控制作用。现在不支持目录中嵌套子目录。

weixin_45715405的博客 2909

智能座舱通信技术解析:从CAN总线到车载以太网与V2X

在汽车电子与智能网联快速融合的背景下,座舱智能化已不再是简单的屏幕堆砌,而是依赖底层通信技术构建的复杂系统。CAN总线因高可靠性与确定性传输,持续承担车身控制与安全信号的传递;车载以太网则凭借高带宽优势,成为多屏高清视频与OTA升级的核心通道;V2X车路协同技术进一步将座舱与外界的实时信息互联。理解这些技术的分工协作,是掌握智能座舱架构、开展座舱测试与故障排查的关键。本文从实际测试经验出发,梳理不同总线在座舱内部及外部的应用逻辑,结合低成本的实验台架搭建指南,展示从信号采集、网关转发到多媒体流传输的完整链路

weixin_29284657的博客 343

Shell脚本——make命令和Makefile文件

make命令是一个常用的编译命令,尤其在C/C++开发中,make命令通过makefile文件中描述源程序之间的依赖关系进行自动编译; makefile文件是按照规定格式编写,需说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系; 首次执行make命令时,编译所有相关文件,之后再执行make命令时,以增量方式进行编译,即只对修改的源文件相关的目标文件进行编译; 注:许

少点套路,多点诚意 3万+

RTX 50系显卡(5080/5090D)CUDA 12.8环境下的vLLM部署避坑与实战指南

本文为RTX 5080/5090D显卡用户提供了在CUDA 12.8环境下部署vLLM的完整实战指南。文章详细介绍了从驱动安装、CUDA 12.8环境配置、PyTorch Nightly版本精准匹配,到vLLM源码编译及常见报错排查的全过程,帮助开发者高效利用新一代硬件进行大模型推理。

gray5的博客 663

电压抬升电路设计

一、实验目的 掌握集成运放电压放大电路设计基本方法。 掌握基本仪器使用方法(电源、信号发生器、示波器)。 二、实验内容及结果 实验内容 基于集成运放设计一传感器信号采集电路。传感器输出信号在±50mV,频率为100Hz以内,模数转换器允许输入电压在0~5V,要求设计传感器与模数转换器之间的信号采集电路,实现传感器信号放大10倍,并适合模数转换器的输入。模数转换器的输入电阻为1KHz,设计电路时,可使用1KHz电阻作为信号采集电路负载,代替模数转换器。 实验具体要求如下: (1)确定电路形式,说明电压转

Safaearth的博客 4万+

Linux make --强大的编译工具

用途说明 make命令是一个常用的编译命令,尤其是在开发C/C++程序时,它通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译。Makefile文件是按照规定的格式编写的,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。在首次执行 make时,会将所有相关的文件都进行编译,而在以后make时,通常是进行增量编译,即只对修改过的源代码进行编

老莫小小朋友 1522

YOLOv11改进 | Conv篇 | DWRSeg扩张式残差助力小目标检测 (附创新修改后的C3k2DWRSeg)

本文内容给大家带来的DWRSeg中的DWR模块来改进YOLOv11中的C2f和Bottleneck模块,主要针对的是小目标检测,主要创新点可以总结如下:多尺度特征提取机制的深入研究和创新的DWR模块和SIR模块的提出这种方法使得网络能够更灵活地适应不同尺度的特征,从而更准确地识别和分割图像中的物体。DWRSeg的基本原理和框架,并且能够在你自己的网络结构中进行添加DWRSeg需要增加一定的计算量一个DWR模块大概增加0.4GFLOPsYOLOv11改进系列专栏——本专栏持续复习各种顶会内容——科研必备。

Snu77的博客 4184

makefile包含库目录_如何获取包含其他Makefile的Makefile目录

makefile包含库目录I experience this problem: 我遇到这个问题: I have a file common.mk that includes release.mk which in the same directory. common.mk is included by the top-level Makefile. common.mk and release.m...

cuma2369的博客 813

界面材料知识

界面材料(TIM)用于芯片和散热器之间的导热作用,将低导热系数的空气(空气的导热系数(0.026 W /M·K))排除,换成高导热系数,低热阻导热系数的材料。具体的:TIM1为芯片DIE和芯片保护壳之间的界面材料,一般是直接焊接的方式,比如使用铟片,有很高的导热系数;芯片厂工程师主要找的是TIM1界面材料。TIM1.5为芯片Die和散热器之间的界面材料,比较少见;TIM2为我们所常见的界面材料,用于芯片外壳和散热器之间。(图片来源网上)

YY_Share的博客 1853

SkillWeaver:自主进化的Web智能体框架,通过技能发现与组合实现能力迭代——让AI像人类一样“学习-实践-积累”,构建可扩展的技能库

SkillWeaver重新定义了Web智能体的“学习-实践”循环,使其从被动执行者进化为主动进化者。通过技能的持续积累与组合,智能体不仅能应对已知任务,更能探索未知场景,为自动化与AI的深度融合开辟了新路径。随着框架的成熟与社区的扩展,我们或许正见证着下一代智能体基础设施的诞生。传统Web机器人(Web Agents)依赖预设脚本或静态规则执行任务,但面对动态变化的网站结构、复杂交互逻辑时,其能力边界明显。的闭环机制,使智能体能像人类学习技能一样,不断扩展自身能力,适应新场景。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 320

Linux命令之make - 强大的编译工具

<br /><br />本文链接:http://codingstandards.javaeye.com/blog/969924   (转载请注明出处)用途说明<br />make命令是一个常用的编译命令,尤其是在开发C/C++程序时,它通过Makefile文件中描述的源程序之间的依赖关系来自动进行编译。Makefile文件是按照规定的格式编写的,文件中需要说明如何编译各个源文件并连接生成可执行文件,并要求定义源文件之间的依赖关系。在首次执行make时,会将所有相关的文件都进行编译,而在以后make时,通

jacxie2009的专栏 2486

【异常】Claude Code 400错误(Extra inputs are not permitted)解决方案

摘要:Claude Code 2.0.37+版本因API请求包含未支持的custom.input_examples参数导致400错误,使核心功能失效。解决方案是降级至稳定版v2.0.32:先卸载当前版本(npm uninstall -g @anthropic-ai/claude-code),再安装指定版本(npm install -g @anthropic-ai/claude-code@2.0.32),最后验证请求是否恢复正常。该问题确认在v2.0.32版本不存在。(148字)

奶爸的编程之路,也就一周冷个三天 2037

每天学习一个Linux命令之make

make命令是一个强大的构建工具,可以显著简化项目构建的过程。本文介绍了make命令的基本用法以及可用的选项。要深入了解和灵活使用make命令,可以参考相关的文档和示例。希望本文能够帮助您更好地理解和使用make命令,加快项目的构建过程。

俞兆鹏的博客 3126

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Linux中的make与Makefile详解

makefile# 定义变量CC = gcc# 使用变量$@:当前目标$<:第一个依赖项$^:所有依赖项$*:不包含扩展名的目标名称make和Makefile是Linux系统中强大的自动化构建工具,通过定义规则和依赖关系,可以大大简化复杂项目的编译过程。进度条的实现可以直观地了解编译进度。

m0_74319933的博客 2275

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

后端开发之libcurl库编译与安装

curl 是以URL语法来传输输出的一个命令行工具。libcurl 是对对其功能的封装,实现了命令行工具的所有功能。 curl 支持HTTP、HTTPS、FTP、FTPS、DICT、TELNET、LDAP、FILE,和GOPHER协议。 libcurl 使用C语言编写。本文介绍在Linux,Windows的下的编译方法。这其中会用到cmake,gcc,visual c++ 2017(windows 下msvc方式编译)。 下载libcurl源码 从GitHub或者Gitee都有镜像可以下载。 git

程序猿广哥 636

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

make 2>&1 | tee log.txt命令解析

make 2>&1 | tee log.txt命令解析 1. make是什么? make是linux下一个非常强大的命令,简单点就是你要编译你的源代码就得靠他了。 2. 2>&1是什么意思?0 stdin,1 stdout,2 stderr 2>&1应该分成两个部分来看,一个是2>以及另一个是&1, 其中2>就是将标准出错重定向到...

Jorry Zhao的专栏 562

linux下离线安装jq工具

linux下离线安装jq工具 0.jq作用 jq可以将json数据格式化,也可以按照一个规则将数据切片过滤。 1.下载 点击这里下载 官网:https://stedolan.github.io/jq/ 2.安装 将下载后的安装包上传到linux上任意地方 然后执行以下命令解压编译安装 tar -zxvf jq-1.5.tar.gz cd jq-1.5 ./configure && make && make install 3.测试 输入以下命令测试 echo '{"id

idataduck的博客 1万+

makefile和gdb调试

gdb调试 gdb是一个由GNU开源组织发布的、UNIX/LINUX操作系统下的、基于命令行的、功能强大的程序调试工具,其中对于gdb的调试是所有在Linux操作系统下进行开发人员必备的知识 程序示例: #只有添加 -g选项才能表示能够调试 g++ -g ./pointer1.cpp -o ./pointer1.out gdb ./pointer1.out #指定pointer1.out为需要调试的程序 gbd l 表示显示源代码 gdb start表示开始调试 p a 表示查看 a 的值 n 表示下一步

qq_43245691的博客 339

Makefile 語法簡介

Linux/Unix环境下的make和makefile详解    Pathetique    无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工

lxjames833539的专栏 1497

linux系统make命令详解

无论是在Linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。

顺其自然~专栏 2万+

linux中的make命令解释集锦

无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都

William Zhao's notes 1万+

Linux Make 命令详解

<br />无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难。而make工具则可自动完

Solidfish的专栏 8万+

Linux于自动化编译程序命令——make

在Linux系统中,make命令是一个强大且有用的工具,它被广泛用于构建和管理软件项目。本文将详细介绍make命令的使用以及它在开发过程中的重要性。

小嵌同学的博客 2042

【Linux系统】Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试

Linux 是当今计算机领域最重要的操作系统之一,其强大的命令行工具和丰富的生态系统为开发者提供了极大的灵活性和效率。然而,对于新手和部分用户而言,如何使用这些工具高效管理软件、编译代码、自动化构建和调试程序仍然是一项挑战。这篇文章旨在为读者提供一站式的 Linux 工具指南,从软件包管理 (apt) 到编译器 (gcc/g++)、自动化构建工具 (make),再到调试器 (gdb),我们将以清晰、系统化的方式为您逐步解析这些工具的功能和使用方法。

17的博客 8047

Linux编译安装中configure、make和make install各自的作用详解

前言:我们经常在Linux中通过源码安装软件会经过以下三个步骤,但是每一个步骤到底是什么意思呢?本文来详细说明。 总的来说,这些都是典型的使用GNU的Autoconfigure和Automake产生的程序的安装步骤。 (1)./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC(C Complie)或GCC(GNU Compile Collections)...

MIss-Y的博客 1万+
上一篇: 我使用过的Linux命令之ulimit - 在shell进程中限制系统资源
下一篇: 我使用过的Linux命令之man - 显示在线手册页
codingstandards
博客等级 码龄16年 12粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值