Да, вы можете собрать их все сразу. Если ваша цель «все» зависит от всех трех приложений, тогда «make all» должен собрать их все. Вы можете добавить «-j3» для фактической компиляции с использованием трех отдельных потоков и / или процессов (неясно, что вы подразумеваете под «сразу»). Также пара критических замечаний здесь:
- Не указывайте "CC", "CFLAGS" или "LDFLAGS". Вы никогда не должны определять «CC», поскольку он автоматически определяется для вас компилятором C по умолчанию в системе, и вы должны просто добавлять «CFLAGS» и «LDFLAGS» по мере необходимости (используя + =) вместо того, чтобы их загромождать, а просто присвоение им делает ваш Makefile негибким (потому что он не может быть переопределен или дополнен внешне).
- Использование CLASSES для ссылки на файлы ".java" вводит в заблуждение до чертиков ... вам, вероятно, следует переименовать переменную в JAVA_SRCS и определить JAVA_CLASSES = $ {JAVA_SRCS: .java = .class}.
Дополнительную информацию см. В моем руководстве по Makefile . Тем не менее, вы можете рассмотреть более современную систему сборки, такую как Bazel или Gradle . Эти системы разработаны так, чтобы их было намного проще в использовании, меньше подверженных ошибкам, более переносимыми (поскольку они облегчают выполнение задач), и быстрее.