c - 如何在 Makefile 中实现 "make install"?

标签 c makefile static-libraries gnu-make

所以这是我正在使用的存储库:https://github.com/Garuda1/unixlib

我想知道我编译的 lib ( unixlib.a ) 和我的头文件 ( unixlib.h ) 应该在哪里,以便能够通过编译来使用 lib (在 Linux-x86 或 Linux-x86_64 下):

$ gcc my_source.c -lunixlib

并在 my_source.c 中包含标题.

我想我将执行此操作添加到 Makefile :
install:
    mv $(NAME).a $(LIB_PATH)
    mv unixlib.h $(HEADER_PATH)

但我不知道是什么$(LIB_PATH)$(HEADER_PATH)是...

最佳答案

通常在 UNIX 系统中, header 转到 $PREFIX/include , 库文件转至 $PREFIX/lib ,其中 PREFIX可以 /usr/usr/local管他呢。在 linux 中,如果你将你的库安装到这些目录中,它会被 gcc 找到。随心所欲,只需 gcc my_source.c -lunixlib .PREFIX各种构建工具通常使用环境变量来提供该前缀。
我还建议使用 DESTDIR变量,它至少被 Debian 打包工具使用。
所以,makefile 应该是这样的:

# PREFIX is environment variable, but if it is not set, then set default value
ifeq ($(PREFIX),)
    PREFIX := /usr/local
endif

install: unixlib.a
    install -d $(DESTDIR)$(PREFIX)/lib/
    install -m 644 unixlib.a $(DESTDIR)$(PREFIX)/lib/
    install -d $(DESTDIR)$(PREFIX)/include/
    install -m 644 unixlib.h $(DESTDIR)$(PREFIX)/include/
请注意,install -d ...仅在提供的 DESTDIR 中不存在目录的情况下使用例如。
你也可以看看我的非递归模板 make寻找一些提示:https://github.com/cppfw/prorab/blob/master/src/prorab.mk

关于c - 如何在 Makefile 中实现 "make install"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39892692/

相关文章:

c - ***没有制定目标 '../../../Makefile.include' 的规则。停止

objective-c - Xcode 中 2 个第三方库的重复符号问题

c# - 库 (DLL) 中的静态变量是否由引用该库的所有进程共享?

makefile - 你如何制作一个makefile

c++ - Undefined reference to function错误,一起使用C和C++

ios - 归档包含静态库的 xcode 项目

c - 如何为需要多次输入的 C 程序编写 Bash 脚本?

c - 标记双向链表中的当前位置

c - 在C中,为什么仅改变循环边界后结果不同?

c - UART 至 UART 桥接器 STM32