首页 > 系统相关 >原来Linux makefile可以如此简单

原来Linux makefile可以如此简单

时间:2023-10-29 13:02:02浏览次数:36  
标签:opt ThirdPartyLib Linux makefile 指定 C++ 编译 DHAVE 简单


作者:朱金灿

  原来以为Linux makefile挺复杂的,直到从网上找到一个编译模板,发现Linux makefile是如此简单,而且你还可以根据该模板实现C程序和C++程序的混合编译。下面是Linux makefile模板的脚本代码:

# 指定c编译器
CC = gcc
# 指定C++编译器
C++ = g++
# 指定链接器
LINK = g++

# 指定包含头文件路径
INCLUDES = -I. -I"/opt/ThirdPartyLib/pugixml/include" -I"/opt/ThirdPartyLib/libcurl/include" -I"/opt/ThirdPartyLib/hdf4/include" -I"/opt/ThirdPartyLib/hdf-eos2-3.0/include"

# 指定包含的库文件路径及对应的库文件
LIBS = -L"/opt/ThirdPartyLib/pugixml/lib" -lpugixml -lsqlite3 -L"/opt/ThirdPartyLib/libcurl/lib" -lcurl 
# 设置c程序编译选项
CCFLAGS = -Wl,--rpath=./:/opt/ThirdPartyLib/libcurl/lib -DHAVE_STRUCT_TIMEVAL -DHAVE_RECV -DHAVE_SEND -DHAVE_STDBOOL_H -DHAVE_BOOL_T -DSTDC_HEADERS -DHAVE_FCNTL_H -DHAVE_FCNTL_O_NONBLOCK -DHAVE_UNISTD_H -DHAVE_SYS_STAT_H -DHAVE_SYS_TYPES_H -c -g -fPIC
# 设置c++程序编译选项
C++FLAGS =-Wl,--rpath=./:/opt/ThirdPartyLib/libcurl/lib -DHAVE_STRUCT_TIMEVAL -DHAVE_RECV -DHAVE_SEND -DHAVE_STDBOOL_H -DHAVE_BOOL_T -DSTDC_HEADERS -DHAVE_FCNTL_H -DHAVE_FCNTL_O_NONBLOCK -DHAVE_UNISTD_H -DHAVE_SYS_STAT_H -DHAVE_SYS_TYPES_H -std=c++11 -c -g -fPIC
# 指定编译输出文件路径
TARGET=/opt/Program/bin/demo
# 指定编译的c++源码文件
C++FILES = DatabaseOperation.cpp DownloadData.cpp
# 指定编译的c源码文件
CFILES = dynbuf.c curl_multibyte.c nonblock.c slist_wc.c strtoofft.c tool_binmode.c \
tool_writeout.c tool_writeout_json.c warnless.c 
# 指定目标文件
OBJFILE = $(CFILES:.c=.o) $(C++FILES:.cpp=.o)

all:$(TARGET)

$(TARGET):$(OBJFILE)
	$(LINK) $^ $(LIBS) -Wl,--rpath=/opt/MonitoringDroughtProgram/bin:/opt/ThirdPartyLib/pugixml/lib:/opt/ThirdPartyLib/libcurl/lib -fPIE -o $@

%.o:%.c
	$(CC) -o $@ $(CCFLAGS) $< $(INCLUDES)

%.o:%.cpp
	$(C++) -o $@ $(C++FLAGS) $< $(INCLUDES)
# 安装命令选项
install:
	tsxs -i -o $(TARGET)
# 清理中间编译文件选项
clean:
	rm -rf $(TARGET)
	rm -rf $(OBJFILE)

  从上面可以看出一个标准Linux makefile的脉络是相当清晰的,大概可以分为以下几部分:指定编译器(c编译器或者C++编译器),指定的包含的头文件路径以及库文件路径以及对应的库文件、设置c程序编译选项、设置c++程序编译选项、指定编译的c++或c源码文件、指定编译输出文件路径和指定目标文件,其它部分基本照抄就行。
参考文献:
1.Linux下的C/C++ 混合编译


标签:opt,ThirdPartyLib,Linux,makefile,指定,C++,编译,DHAVE,简单
From: https://blog.51cto.com/u_15456319/8079972

相关文章

  • windows 10卸载(注销)WSL,注销(卸载)当前安装的Linux的Windows子系统
    1.查看当前环境安装的wslwsl--list2.注销/卸载当前安装的linux的Windows子系统wsl--unregisterdebian3.卸载成功后,查看当前看装的子系统wsl--list4.查看可安装的linux的windows子系统wsl--list--online ......
  • ensp 简单配置路由添加ip操作小实例
    ensp简单配置路由添加ip操作displaycu#查看路由器配置displayiprouting-table[x.x.x.x]#查看路由表【和x.x.x.x相关的条】案例一、2个路由器配置ip地址给2个路由器配合ip地址,方法一样ipaddressx.x.x.x.x掩码24(255.225.255.0)1.启动2个路由器,有......
  • 交换机简单认识
    华为VRP网络操作系统VersatileRoutingPlatform通用路由平台(VRP)一、认识界面<Huawei>用户视图查看运行状态或者其他参数[Huawei]系统视图配置设备的系统参数[Huawei-GigabitEthernet0/0/1]接口视图配置接口参数G开头千兆网,......
  • 嵌入式linux SD读取数据导致死机问题
    一、碰到的问题通过ssh命令将文件写入到SD卡中,发现有一张SD卡(金士顿)可以成功写入,而另一张SD(闪迪)一直写入失败。应用层读取文件时,有一张SD卡(金士顿)可以成功读取数据;另一张SD卡(闪迪)有很大的概率会导致司机。二、SD卡驱动硬件电路图1.SD卡驱动硬件电路三、调试过程查看......
  • Linux操作系统 no.2
    一.用户/组:1.创建用户、组:  useradd  groupadd2.删除用户:  userdel3.修改用户密码:  passwd 二.文件权限:chowm:修改文件属主,属组。chgrp:修改文件属组。chmod: 修改文件权限。 chowm:改变文件属性chmod:改变文件访问方式  r(读取)  w(写入)  x(执......
  • linux top命令使用
    top命令可以用来查看当前服务的cpu使用情况,以下是使用cpu返回的参数情况:参数说明:PID:进程ID。USER:进程所属的用户。PR:进程的优先级。NI:进程的优先级调整值(Nice值)。VIRT:进程使用的虚拟内存大小。RES:进程使用的物理内存大小。SHR:进程使用的共享内存大小。S:进程状态,如S表示睡眠状态,R表......
  • 《Linux》命令基础
    命令无论是什么命令,在Linux中有其通用的格式command[-options][parameter]command:命令本身-options:[可选的]命令选项,可以通过选项控制命令的行为parameter:[可选的]命令参数,多数用于命令的指向目标ls命令ls[-a-l-h][路径]ls #平铺的形式列出工作目录下的【可见文件/文件夹......
  • 每天对linux的看法
       linux系统主打网络服务,专业性强,为免费开源系统,主要用于搭建服务器,性能稳定,长时间开机不出现卡顿情况,漏洞少,更安全。在老师的提示,我下载了vmware虚拟机,在虚拟机上下载centos7版本的linux系统,下载了xshell以及xftp,把xshell以及xftp与虚拟机连接起来。根据书上的知识来看,主要......
  • Linux touch命令:创建文件及修改文件时间
    既然知道了如何在Linux系统中创建目录,接下来你可能会想在这些目录中创建一些文件,可以使用 touch命令。需要注意的是,touch命令不光可以用来创建文件(当指定操作文件不存在时,该命令会在当前位置建立一个空文件),此命令更重要的功能是修改文件的时间参数(但当文件存在时,会修改此文件......
  • 第九周Linux学习笔记
    本周的学习内容属实有点多(差点跟不上,浅浅吐槽一下),学习了第五章进程管理以及第六章I/O重定向。具体命令及其作用在下面一一列举。第五章:进程管理进程小tips:每个进程都有唯一的进程表示PID;进程有就绪态、阻塞态和运行态三个状态;进程有的是密集型有的是疏散型。1、“psaux”命令,......