Как я могу скомпилировать все файлы .cpp, кроме одного, используя g ++? - PullRequest
0 голосов
/ 27 февраля 2019

Чтобы скомпилировать все файлы C ++ в моем исходном каталоге, я запускаю

g++ -std=c++17 ../src/*.cpp -o ../out/a.out

Как я могу скомпилировать все cpp файлы в данном каталоге, кроме main.cpp?

Ответы [ 3 ]

0 голосов
/ 27 февраля 2019

Мы можем отфильтровать глобус в массив 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:

mapfile -d $'\0' -t files < <(printf '%s\0' ../src/*.cpp | grep -zv '/main\.cpp$')
g++ -std=c++17 "${files[@]}" -o ../out/a.out
0 голосов
/ 27 февраля 2019

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

0 голосов
/ 27 февраля 2019
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
...