c++ - 具有取决于环境的功能的 Makefile C/C++

标签 c++ c function makefile environment-variables

我正在努力解决以下问题:

我想在我的 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 绿色,否则为纯白色。

参见 7.2 Syntax of Conditionals

关于c++ - 具有取决于环境的功能的 Makefile C/C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199418/

相关文章:

c++ - 通过迭代器访问 qlist 元素的段错误

c++ - 我可以定义一个键是结构的映射吗?

c - C 中的多线程套接字

php - 在 Windows 7 上从源代码编译 PHP, fatal error C1900

c++ - 如何直接在 Rcpp 包中调用 nloptr 包中的 C 函数?

javascript - 我如何从匿名自调用函数中公开函数?

javascript - 如何将函数应用于两个数组(数组的数组)的第 n 个元素?

c++ - system() 不在 for 循环 C++ 中工作

安卓NDK。 #define LOGI(...) 是什么意思。以及一些基本问题

c# - 如何跳过库函​​数中的某些可选参数