Компиляция файлов c / cpp в каталоге, заданном в качестве входных

Мне нужно написать сценарий с именем DirCompile , который получает путь к каталогу в качестве аргумента командной строки и компилирует все файлы c / cpp .

например, файл helloWorld.c будет скомпилирован в helloWorld.exe .

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

Я более или менее знаю, какие команды необходимы, но мне не удается собрать их вместе

-1
28.06.2017, 19:42
2 ответа

Использование цикла оболочки, явный вызов компилятора C:

#!/bin/sh

mkdir -p "compiled files"

for src in "$1"/*.c "$1"/*.cpp; do
    case $src in
        *.c)   compiler=${CC:-cc}   ;;
        *.cpp) compiler=${CXX:-c++} ;;
    esac
    command "$compiler" -o "compiled files"/"$( basename "$src" "${src##*.}" )exe" "$src"
done

Это будет использовать $CCи $CXXпеременные оболочки/среды в качестве компилятора, если они не установлены или не пусты, и в этом случае по умолчанию будет использоваться ccили c++в зависимости от суффикса исходного файла..

Использование цикла оболочки, использование makeс неявными правилами:

#!/bin/sh

mkdir -p "compiled files"

for src in "$1"/*.c "$1"/*.cpp; do
    make "${src%.*}" && mv "${src%.*}" "compiled files"/"$( basename "$src" "${src##*.}" )exe"
done

Это будет использовать неявные правила для сборки исполняемого файла (на них влияют переменные среды, такие как $CC, $CXX, $CFLAGSи т. д. )После успешной сборки исполняемый файл переименовывается в соответствии с вашим конкретным требованием иметь суффикс имени файла .exeв файле.

0
28.01.2020, 05:12

Что-то вроде приведенного ниже может сработать.

#! /bin/sh
mkdir  -p  'compiled files'
for  x  in "$1"/*.c;    do  gcc  $x  -o "compiled files/${x%.c}.exe";    done
for  x  in "$1"/*.cpp;  do  g++  $x  -o "compiled files/${x%.cpp}.exe";  done
0
28.01.2020, 05:12

Теги

Похожие вопросы