【问题标题】:how to print {done} in the same column in makefile如何在makefile的同一列中打印{done}
【发布时间】:2021-08-21 22:48:21
【问题描述】:

我正在尝试在 makefile 中编译一些文件时打印 {done}。像这样:

Compiling src/execution/ft_cd.c:                                {done}
Compiling src/execution/ft_check_path.c:                        {done}
Compiling src/execution/ft_echo_pwd_env.c:                      {done}
Compiling src/execution/ft_execution.c:                         {done}
Compiling src/execution/ft_exit.c:                              {done}
Compiling src/execution/ft_export.c:                            {done}
Compiling src/execution/ft_init_env.c:                          {done}
Compiling src/execution/ft_linked_lists.c:                      {done}
Compiling src/execution/ft_linked_lists_rest.c:                 {done}
Compiling src/execution/ft_pipes.c:                             {done}
Compiling src/execution/ft_redirection.c:                       {done}
Compiling src/execution/ft_unset.c:                             {done}
Compiling src/execution/ft_utlis.c:                             {done}
Compiling src/lexer/lexer_debug.c:                              {done}
Compiling src/lexer/lexer_get_tokens_op.c:                      {done}
Compiling src/lexer/lexer_get_tokens_word.c:                    {done}
Compiling src/lexer/lexer_get_tokens.c:                         {done}
Compiling src/lexer/lexer.c:                                    {done}
Compiling src/expansion/expansion.c:                            {done}
Compiling src/parse/check_syntax.c:                             {done}
Compiling src/parse/parser_debug.c:                             {done}
Compiling src/parse/parser.c:                                   {done}
Compiling src/readline/readline_debug.c:                        {done}
Compiling src/readline/readline.c:                              {done}
Compiling src/readline/get_next_line.c:                         {done}
Compiling src/main.c:                                           {done}

但是输出是这样的:

Compiling src/execution/ft_cd.c:                                {done}
Compiling src/execution/ft_check_path.c:                                {done}
Compiling src/execution/ft_echo_pwd_env.c:                              {done}
Compiling src/execution/ft_execution.c:                         {done}
Compiling src/execution/ft_exit.c:                              {done}
Compiling src/execution/ft_export.c:                            {done}
Compiling src/execution/ft_init_env.c:                          {done}
Compiling src/execution/ft_linked_lists.c:                              {done}
Compiling src/execution/ft_linked_lists_rest.c:                         {done}
Compiling src/execution/ft_pipes.c:                             {done}
Compiling src/execution/ft_redirection.c:                               {done}
Compiling src/execution/ft_unset.c:                             {done}
Compiling src/execution/ft_utlis.c:                             {done}
Compiling src/lexer/lexer_debug.c:                              {done}
Compiling src/lexer/lexer_get_tokens_op.c:                              {done}
Compiling src/lexer/lexer_get_tokens_word.c:                            {done}
Compiling src/lexer/lexer_get_tokens.c:                         {done}
Compiling src/lexer/lexer.c:                            {done}
Compiling src/expansion/expansion.c:                            {done}
Compiling src/parse/check_syntax.c:                             {done}
Compiling src/parse/parser_debug.c:                             {done}
Compiling src/parse/parser.c:                           {done}
Compiling src/readline/readline_debug.c:                                {done}
Compiling src/readline/readline.c:                              {done}
Compiling src/readline/get_next_line.c:                         {done}
Compiling src/main.c:                           {done}

这是我打印此输出的规则:

$(OBJECTSDIR)/%.o : $(SOURCEDIR)/%.c
    $(HIDE)$(MKDIR) $(dir $@)
    $(HIDE)/bin/echo -n "Compiling $<:"
    @echo "\t\t\t\t$(GREEN){done}$(RESET)"
    $(HIDE)$(CC) $(FLAGS) -I $(HEADERSDIR) -I $(LIBFT_HEADER) -o $@ -c $<

【问题讨论】:

  • 有更好的方法,但您可以在添加选项卡之前在 echo 中使用回车键重置为第 0 列。 @echo -e "\r\t\t\t\t\t{done}"
  • @RyanHaining 我试过你的解决方案,效果很好,非常感谢。
  • @DarkSide77 这很粗糙。 {done} 将始终出现在同一个位置,如果它们碰巧在那里,则会覆盖其他字符

标签: c++ c gcc makefile


【解决方案1】:

假设您使用的是 POSIX shell,例如 bash 或 dash,请使用 printf 内置命令,而不是使用制表符回显:

    @printf "Compiling %-40s$(GREEN){done}$(RESET)" "$<:"

【讨论】:

    猜你喜欢
    • 2013-05-04
    • 2012-07-31
    • 2012-05-13
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多