というプログラムを書く必要があります。コンパイルディレクトリコマンドライン引数としてディレクトリパスを受け取り、すべてのc / cppファイルをコンパイルします。
たとえば、helloWorld.c
ファイルはhelloWorld.exe
。
compiled files
コンパイルされたすべてのファイルは現在のライブラリの下の名前のフォルダに配置され、正しい権限も必要です。
必要なコマンドをある程度知っていますが、一緒に使用することはできません。
答え1
シェルループを使用して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
ファイルにファイル名のサフィックスが含まれる必要があるという特定の要件を満たすように、実行可能ファイルの名前が変更されます。
答え2
次のことがうまくいく可能性があります。
#! /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