Linux / Unix и Makefiles - PullRequest
       21

Linux / Unix и Makefiles

0 голосов
/ 17 мая 2010

В Linux сделать файл:
Я хочу запустить программу вывода только в случае успешной компиляции.

Есть ли способ сделать это?

Ответы [ 4 ]

5 голосов
/ 17 мая 2010

Самый простой способ, которым я могу думать, выглядит следующим образом ...

run: program_name
        ./program_name

«make run» должен завершиться неудачей, если имя_программы отсутствует и не может быть скомпилировано.

3 голосов
/ 17 мая 2010

Как уже говорили другие, используйте &&. Например:

$ make && ./a.out

Есть две вещи, которые делают эту работу; Во-первых, в UNIX существует соглашение, согласно которому все, что завершается успешно, возвращает 0 (включая программы на Си). Есть старая шутка, которая помогает вам вспомнить: «Римская империя пала, потому что у римлян не было нуля, чтобы успешно завершить свои программы на Си».

Во-вторых, && - это логическая версия "and" для короткого замыкания. Таким образом, он будет оценивать выражение с левой стороны и ТОЛЬКО, если это 0, он будет оценивать выражение с правой стороны. В этом также разница между операторами Java && (короткое замыкание) и & (всегда оцениваются оба операнда). Многие императивные языки содержат оба вида операторов, в случае, если в правом операнде булева выражения есть побочные эффекты (например, ввод-вывод, обновление переменных), и в этом случае вы определенно хотите оценить оба операнда. Некоторые люди, однако, сказали бы, что вставлять побочные эффекты таким способом - плохой стиль.

3 голосов
/ 17 мая 2010

make возвращает 0 при успехе и 2 при сбое компиляции. Я попробовал следующее с bash

make && ./success

где success - имя сгенерированного двоичного файла.
&& гарантирует, что вторая программа будет выполняться только в случае успешного выполнения первой.

1 голос
/ 17 мая 2010

Если ваш встроенный исполняемый файл называется a.out, то вы можете сделать что-то вроде этого:

% make && ./a.out
...