5

Недавно я начал изучать язык cpp на linux, и теперь я запускаю файл cpp, используя следующие команды.

g++ -o xxx xxx.cpp
./xxx

Есть ли способ сделать это однострочной командой, такой как compile-and-run xxx.cpp?Благодарю.

5 ответов5

6

Как насчет этого?
g++ -o xxx xxx.cpp && ./xxx ?
( && означает, что он будет ждать, пока первая задача будет выполнена, & означает, что он запустит ее сразу после того, как запустил первую, вы НЕ хотите эту задачу. )

6

Джереми Бэнкс опубликовал один из самых удивительных трюков, которые я когда-либо видел в SO. По сути, он добавляет одну строку Bash-Script вверху файла cpp, что позволяет ему напрямую компилировать и выполнять этот файл.

//&>/dev/null;x="${0%.*}";[ ! "$x" -ot "$0" ]||(rm -f "$x";cc -o "$x" "$0")&&exec "$x" "$@"

Это объяснение скопировано с сущности:

//

Поскольку мы не хотим, чтобы это было видно в C, мы помещаем это в комментарий.

&>/dev/null

К сожалению, // интерпретируется как недопустимая команда оболочки и выдает сообщение об ошибке, поэтому нам нужно перенаправить его в /dev/null чтобы избавиться от него.

;x="${0%.*}"

Это определяет, каким будет наше скомпилированное имя файла, с помощью замены строки, чтобы избавиться от любых расширений текущего имени файла.

;[ ! "$x" -ot "$0" ]||

Эта проверка, если уже существует скомпилированная версия, более новая, чем исходный файл. Если не...

(rm -f "$x";cc -o "$x" "$0")

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

&&exec "$x" "$@"

Если компиляция прошла успешно или не нужна, передайте выполнение скомпилированному коду, передав аргументы, переданные этому сценарию.

Эта техника называется полиглотом, что означает, что она написана на нескольких языках и также может быть интерпретирована этими языковыми переводчиками без проблем.

3

Создайте Makefile следующим образом:

xxx: xxx.cpp
    g++ -o xxx xxx.cpp

run: xxx
   ./xxx

Затем просто введите make run . Конечно, ваш Makefile может быть гораздо более сложным, это простой пример. Важной вещью является предложение "запустить".

3

простой, общий make-файл может сделать это:

$ cat Makefile  
.SUFFIXES: .o .c  

.c:   
        cc -o $@ $<  
        ./$@  
$ make myprogram  

скомпилирует myprogram.c и запустит myprogram. Как это определено с правилами по умолчанию, это работает для каждого файла .c в этом каталоге.

Естественно, вы должны заботиться о библиотеках, каталогах и других зависимостях ...

Я надеюсь, что это помогает, тем не менее

1

Вы можете написать сценарий. лайк:

#!/bin/bash

g++ -o $1 $1.cpp
./$1

затем сделайте его исполняемым chmod u+x script.sh и назовите его как script.sh yourcode (пропустите cpp или измените скрипт).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .