に依存し、私は次のような問題に苦しんでいます:MakefileのC/C++環境
私は色のための私のMakefileでtputを使用したいが、それは環境変数$ TERM(と\とエコーの代替を必要とします033 [0; 31mは移植性がなく、すべてのコンピュータで同じように動作しません)。
変数を持たない環境では、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を1つだけ持つことです。関数ifeqを見てみましたが、うまく動作しませんでした。
読んでいただきありがとうございますようお願い申し上げます。ここでの問題を想定し
感謝^^感謝:「ENV -iをしようとしたときに$ TERMは「ダム」の値を取得しますので、それは次のような動作しませんでした私は答えを得ることができました^^。 $ TERMがなぜその価値を持っているのか、私はそれに注意する必要があるのか分かりますか? –
これを拡張して 'ダム'をチェックするだけで十分です。本当の問題は、 'TERM'値が要求された' tput'エラーの能力を持たず、 'TERM'の値を避けるために* that *をチェックしなければならない場合ですこれは堅牢です。 –
実際、 '$(TERM)'は 'make 'の中で直接(親シェルからエクスポートされるので)利用できるので、' $(shell) 'は必要ありません。 (完全に信頼できるとは限りませんが) –