我正在努力解决以下问题:
我想在我的 Makefile 中使用 tput 来获取颜色,但它需要环境变量 $TERM(并且带有\033[0;31m 的 echo 替代方案不可移植,并且在所有计算机上的行为方式都不相同)。
在没有变量的环境中,make 失败并且程序未编译。 我已经尝试在 Makefile 中搜索环境变量测试,但到目前为止没有成功。
这是我想做的一个例子:
define my_color
@tput setaf $2
@tput bold
@echo $1
@tput sgr0
endef
CC = gcc
CFLAGS = -Wall -Wextra
SRCS = my_super_file.c
OBJS = $(SRCS:.c=.o)
NAME = super_programm
all: $(NAME)
$(NAME): $(OBJS)
$(call my_color, " Compiling $<", 2)
$(CC) -o $(NAME) $(OBJS)
clean:
rm -rf $(OBJS)
fclean: clean
rm -rf $(NAME)
re: fclean all
.PHONY: all re clean fclean
这里有一个更完整的例子:https://github.com/Hellfire01/Makefile/blob/master/Makefile
两者都可以在任何计算机上正常工作,但在我的服务器上不行
我想做的是只有一个 Makefile 能够同时在我的计算机和我的服务器上工作,我试着查看函数 ifeq 但我没有成功让它工作。
非常感谢您的阅读。
最佳答案
我认为这个 makefile 说明了你想要什么:
have_term := $(shell echo $$TERM)
ifdef have_term
define my_color =
@tput setaf $2
@tput bold
@echo $1
@tput sgr0
endef
else
my_color = @echo $1
endif
all:
$(call my_color, "Hello world", 2)
如果 TERM
在环境中定义,则 make
打印 Hello World
绿色,否则为纯白色。
关于c++ - 具有取决于环境的功能的 Makefile C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199418/