gpt4 book ai didi

c - Makefile:选择以编程方式针对动态或静态库进行编译

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:23 26 4
gpt4 key购买 nike

我开发了一个软件,需要针对来自外部供应商的库进行编译。在某些情况下,这些库可用作共享库 (libexample1.so) 或静态库 (libexample1.a)。

我希望我的 makefile 能够检测到这种情况。我的想法是检查静态库文件,如果不存在则重新定义一些编译标志。

我现在的代码是这样的:

$(PROGRAM1):$(PROGRAM1_OBJS)
ifneq ("$(wildcard $(STATIC_LIB_PATH)","")
@echo "Compiling against static library"
else
@echo "Compiling against dynamic library"
STATIC_LIB_PATH = ""# SETTING IT TO EMPTY
LDFLAGS += -lexample1
endif
(compilation instructions)

这对我不起作用,因为它正在尝试执行 STATIC_LIB_PATH...关于如何处理这种情况的任何建议?这是最好的方法还是有更好的方法?

最佳答案

如果你想设置 make 变量,你必须在配方之外进行。在配方内部,它将被解释为要执行的命令。

在您的情况下,您可以在任何规则之前移动分配

ifeq ("$(wildcard $(STATIC_LIB_PATH)","")
STATIC_LIB_PATH = # SETTING IT TO EMPTY
LDFLAGS += -lexample1
endif

# ...

$(PROGRAM1):$(PROGRAM1_OBJS)
(compilation instructions)

通常,您不需要检查静态库和动态库。编译器和链接器已经选择了正确的库。所以,你只需要指定

LDFLAGS += -lexample1

如果可用,链接器会选择动态版本,如果只有静态库,则选择静态版本。

关于c - Makefile:选择以编程方式针对动态或静态库进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23475181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com