Чтобы скомпилировать все файлы C ++ в моем исходном каталоге, я запускаю
g++ -std=c++17 ../src/*.cpp -o ../out/a.out
Как я могу скомпилировать все cpp файлы в данном каталоге, кроме main.cpp?
cpp
main.cpp
Мы можем отфильтровать глобус в массив Bash:
unset files for i in ../src/*.cpp do test "$i" = '../src/main.cpp' || files+=("$i") done g++ -std=c++17 "${files[@]}" -o ../out/a.out
или с использованием GNU grep и mapfile:
grep
mapfile
mapfile -d $'\0' -t files < <(printf '%s\0' ../src/*.cpp | grep -zv '/main\.cpp$') g++ -std=c++17 "${files[@]}" -o ../out/a.out
bash:
shopt -s extglob g++ -std=c++17 ../src/!(main).cpp -o ../out/a.out
ref: https://www.gnu.org/software/bash/manual/bash.html#Pattern-Matching
for f in $(find /path/to/files -name "*.cpp" ! -name "main.cpp") do g++ -std=c++17 path/to/files/"$f" -o /path/to/out/.... done