所以这是我正在使用的存储库: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/