gpt4 book ai didi

mysql - makefile CFLAGS 忽略 $(mysql_config --libs)?

转载 作者:行者123 更新时间:2023-11-30 14:31:44 25 4
gpt4 key购买 nike

我制作了一个玩具 makefile 示例来测试 mysql,但该 makefile 无法识别 mysql_config。这是 makefile 脚本:

CFLAGS = -g -O2  -Wall -Wextra -Isrc -rdynamic $(OPTFLAGS)
LDLIBS = $(OPTLIBS)
SOURCES =$(wildcard *.c)
OBJECTS = asd
all: LDLIBS += $(mysql_config --libs_r) -lm
CFLAGS += -Isrc $(mysql_config --cflags)
all: $(OBJECTS)

当我运行 make all 时,它只执行:

cc -g -O2  -Wall -Wextra -Isrc -rdynamic  -Isrc     asd.c   -lm -o asd

所有 mysql CFLAGS 和 LDLIBS 到哪里去了?还是我的脚本有问题?

当我在 shell 中输入“mysql_config --cflags”时,会返回此信息以进行演示:

-I/usr/include/mysql

最佳答案

内容$(mysql_config --libs_r)旨在要求shell调用该命令并用其输出替换该字符串。

但是,make 使用 $(...) 语法来扩展变量。因此,您尝试运行 shell 命令 mysql_config --libs_r 实际上被解释为扩展名为 mysql_config --libs_r 的 make 变量,而该变量并不存在,并且所以你在这里得到一个空字符串。

您需要从 make 中转义 $(...) 语法,以便将其传递到 shell。

此外,您的缩进似乎暗示您希望 LDLIBS 和 CFLAGS 成为 all 目标上特定于目标的变量,但是如果这确实是您想要的,则必须在末尾使用反斜杠第一行的。简单地缩进该行并不会使它成为上一行的延续。

你想要这个:

all: LDLIBS += $$(mysql_config --libs_r) -lm \
CFLAGS += -Isrc $$(mysql_config --cflags)

这存在一些效率问题,因为它将为每个编译和链接操作运行mysql_config两次。效率更高的是:

mysql_LIBS := $(shell mysql_config --libs_r)
mysql_FLAGS := $(shell mysql_config --cflags)

然后使用make变量$(mysql_LIBS)$(mysql_FLAGS)

关于mysql - makefile CFLAGS 忽略 $(mysql_config --libs)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60164061/

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