Количество выводимых символов - 5. 1000
- это четыре символа. \n
это один символ.
printf
не возвращает количество выводимых «элементов», как это делает семейство функций scanf
для ввода. Возвращает фактическое количество символов.
Запуск из make-файла немного необычен. Вы, возможно, пытаетесь продублировать пункт меню «Скомпилировать и запустить», который есть в некоторых IDE? Make не очень хорошо приспособлен для этого.
Все, что происходит в целевых командах, происходит в подпроцессах, которые не подключены напрямую к терминалу, поэтому make получает нажатие вашей клавиши.
Еще одна вещь, которую нужно учитывать. посмотрите: обычно объект-файл на этапе исполняемого файла (связывание) использует другой набор флагов ( LDFLAGS
и LIBS
), чем этап компиляции. В этом простом примере вам это сойдет с рук,
Вы можете упростить задачу «запустить», поставив ее в зависимость от актуальности вашей программы, а затем просто запустить ее:
run: ${PROGRAM_NAME}
./${PROGRAM} ${ARGS}
Нет особого смысла в запуске make
, когда вы уже используете make
- по крайней мере, не в этом контексте. Возможно, для рекурсивных операций (в разных каталогах), но см. « Рекурсивное создание считается вредным ».
Кроме того, ваш make-файл обычно должен предоставлять цель « all
», и обычно он должен первая и, следовательно, цель по умолчанию.
Как сказано в ответе dmckee, make (1) что-то делает, а не для компиляции и запуска.
Конечно, ничто не мешает вам создать оболочку псевдоним make-run , который выполняет предполагаемый " make && ./prog args ".