how to print {done} in the same column in makefile

Viewed 90

I'm trying to print {done} while compiling some files in makefile. like that:

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}

but instead The output come like that:

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}

This is the rule where I print this output:

$(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 $<
1 Answers

Assuming you're using a POSIX shell such as bash or dash, use the printf builtin instead of echo with tabs:

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