Мне нужно написать сценарий с именем DirCompile , который получает путь к каталогу в качестве аргумента командной строки и компилирует все файлы c / cpp .
например, файл helloWorld.c
будет скомпилирован в helloWorld.exe
.
все скомпилированные файлы будут помещены в папку с именем скомпилированные файлы
в текущей библиотеке, и у нее также должны быть соответствующие разрешения.
Я более или менее знаю, какие команды необходимы, но мне не удается собрать их вместе
Использование цикла оболочки, явный вызов компилятора 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
в файле.
Что-то вроде приведенного ниже может сработать.
#! /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