C/C++可直接使用且指定目的路径的Makefile

一、makfile基本符号说明

$^:所有的依赖文件

$@:目标文件

$<:第一个依赖文件

如下是可直接使用的makefile,注释已说明相关注意事项,按需修改即可

CC := gcc

# 头文件设置
VPATH := ../../include:\
        ../../a/b/c: \
        ../u/d:
CPPFLAGES := $(patsubst %:, -I%, $(VPATH))

# 动态库设置
LDFLAGS := -L../path  \
            -L/path/ab -lpthread -ltest \
            -Lku_ana \
            -Wl,-rpath,../../path/log   # 注意-Wl与rpath间无空格,最好用export定义LD_LIBRARY_PATH指定动态库路径

# 编译选项 其中-fvisibility=hidden隐藏符号增加反编译难度, 公开的接口可加__attribute__ ((visibility ("default")))属性,如#define EXPORT_API __attribute__ ((visibility ("default")))
CFLAGS := -g -Wall -O0 -fvisibility=hidden

# 生成目标文件和*.o到指定目录,使源文件目录更清爽
SRCDIR:= /a/b
DESTDIR := /ab/c
SRCFILES := $(wildcard $(SRCDIR)/*.c)
#OBJFILES := $(SRCFILES:.c=.o)  # *.o与*.c在同一目录可使用此方式,效果与$(patsubst %.c, %.o, $(SRCFILES))相同
OBJFILES:= $(patsubst $(SRCDIR)/%.c, $(DESTDIR)/%.o, $(SRCFILES))
TARGET := app

# 生成.o和目标到DESTDIR中
$(TARGET) : $(OBJFILES)
    $(CC) -o $(DESTDIR)/$@ $^ $(CFLAGS) $(LDFLAGS) 
$(DESTDIR)%.o : $(SRCDIR)/%.c 
    $(CC) -c $< -o $@  $(CFLAGS) $(CPPFLAGS) 

.PHONY: clean
clean:
    -test -d $(DESTDIR) || mkdir -p $(DESTDIR)
    -rm -rf $(TARGET) $(OBJFILES)

.PHONY: install
install:
    -mv $(SRCDIR)/*.h  /A/N

二、手动连接的库

  1. -lz:手动链接压缩库libz
  2. -lrt:手动链接实时库librt。这个库包括异步I / O,消息队列,进程调度,实时信号扩展,信号量,共享内存对象,同步I / O和定时器选项下定义的接口。
  3. -lm:手动链接数学库libm,libm库是Linux系统中的一种数学库文件,它提供了各种数学函数,例如三角函数、指数函数、对数函数以及一些高级数学函数等等。
  4. -lc:手动链接标准c库libc,libc库是Linux系统中最基础的库文件,它包含了各种C语言库函数以及一些系统级的API。这个库文件提供了Linux系统中最常用的函数,例如字符串操作、IO操作、数学函数等等,也是其他库文件的基础。
  5. -lpthread:手动链接多线程库pthread,用到多线程需要链接,包括在linux上使用std::thread也需要链接。libpthread库是Linux系统中的线程库文件,它提供了各种线程相关的API函数。使用这个库可以在Linux系统中创建多线程程序,实现程序并发执行,提高程序运行效率。
  6. -lcrypt:手动链接加密库libcrypt。libcrypt库是Linux系统中的一个加密库文件,可以提供各种加密算法,例如DES、SHA等等。使用这个库可以实现对数据的加密和解密,保证数据的安全性。

参考

[1] 跟我一起写 Makefile(一)_陈皓 跟我一起写makefile-CSDN博客

### 回答1: makefile 是一种用于编译和构建程序的文件,它通常用于管理源代码文件之间的依赖关系和编译指令。它的主要目的是自动化编译和构建过程,使得程序的维护和部署更加方便和高效。 makefile 中包含了一系列规则和指令,用于描述如何将源代码文件转换成可执行文件。每个规则都包含一个目标文件、依赖文件和一条命令,它们共同定义了构建过程与顺序。 在 makefile 中,我们可以定义变量、规则和函数等。变量通过赋值来保存一些常用的配置参数,可以在整个 makefile 中引用。规则则指定了源代码文件和目标文件之间的依赖关系,以及构建步骤和命令。函数可以在规则中使用,用于对变量进行扩展和处理。 使用 makefile,我们可以轻松地处理大型项目的构建过程。它可以自动判断哪些文件需要重新编译,以及构建过程中需要执行哪些命令。这样,当源代码文件发生变化时,只需要重新编译这些文件,而不是整个项目。 makefile 不仅可以编译源代码文件,还可以进行其他操作,如清理对象文件、生成文档、进行单元测试等。通过在 makefile 中添加相应的规则和命令,我们可以方便地管理和执行这些操作。 总之,makefile 是一个强大而实用的工具,它能够自动化构建过程,提高程序的开发效率和部署质量。掌握 makefile使用,有助于开发者更好地管理和组织项目,提高工作效率,并减少出错的可能性。 ### 回答2: makefile是一个用于构建(编译和链接)程序的文本文件,常用于C和C++项目中。makefile中包含了一系列的规则和命令,用于描述程序的依赖关系和编译过程。它的作用是自动化构建过程,帮助开发者更高效地管理代码。 makefile中最基本的元素是目标(target)、依赖(dependencies)和命令(command)。目标表示待构建的文件(例如可执行文件或中间文件),依赖表示目标构建所依赖的文件,命令表示构建目标的具体步骤。 make命令根据makefile中的规则来判断哪些文件需要重新构建。当一个文件的依赖文件发生改变或者目标文件不存在时,make命令会执行相应的命令来完成构建。这个过程被称为“增量构建”,可以避免重复构建不变的部分,提高编译效率。 makefile的编写需要注意一些重要的规则。首先是编译规则,即描述将源代码转化为目标文件的步骤。其次是链接规则,即描述如何将目标文件链接为可执行文件。还有一些常用的变量和函数,可以在makefile使用,如$(CC)表示编译器,$(CFLAGS)表示编译选项等。 除了编译和链接,makefile还可用于执行其他任务,如清理不需要的文件、运行测试等。通过在makefile中定义相应的规则和命令,可以轻松实现这些功能。 总之,makefile是一个非常有用的工具,可以帮助开发者管理和构建C/C++项目,提高开发效率。熟悉makefile的语法和规则,能够更好地理解和掌握项目的构建过程。 ### 回答3: C中的makefile是一个文本文件,用于告诉make命令如何编译和链接程序。它包含了一系列规则和命令,用于描述源代码文件之间的依赖关系和编译顺序。 在makefile中,每个规则都由两部分组成:目标和依赖。目标是我们要生成的文件,而依赖是生成目标所需要的文件或其他目标。在每个规则的下一行,用tab键缩进来写出生成目标所需要执行的编译命令。 make命令会自动读取并解析makefile文件,然后根据依赖关系和规则中的命令来判断哪些文件需要重新编译,从而保证只编译需要更新的文件,提高编译效率。 makefile中还可以定义变量,用于保存一些常用的编译参数和路径。通过使用变量,可以使makefile更加灵活和可维护。 makefile也支持条件判断和循环语句,可以根据不同的条件来执行不同的编译过程,提高代码的可移植性和可扩展性。 总之,makefile是用于自动化编译和构建程序的重要工具。通过编写适当的规则和命令,我们可以轻松地管理大型项目的编译过程,提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值