C++ какие опции компилятора выбрать?

Я написал код на c++ для raspberry pi , в котором задействованы библиотеки sfml и rf24.  
Если для компиляции кода под rf24 нужны такие опции

```
 
g++ -Ofast -Wall RF24_scanner.cpp -lrf24 -o RF24_scanner
```
Так как присутствует опция -0fast , видно , что к коду с использованием библиотеки RF24 применена чуть ли не максимальная оптимизация.  
А для sfml компиляция и трансляция проходит в два этапа:

```
g++ -c main.cpp
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system
```
В связи с этим вопрос : Как компилировать и собирать получившийся код?

Я пробовал разные варианты, так если подключать rf24 на втором этапе то компилятор будет ругаться на первом этапе, если подключать на первом этапе и на втором , то вроде не ругается, но программа запускается и сразу же закрывается. В один этап собрать вообще ни как. Слышал, что можно прописать все опции в фаиле make...

```
g++  -c  -Wall ${file} -lrf24
g++ ${name}.o -o ${name} -lsfml-graphics -lsfml-window -lsfml-system  -lrf24
```
С такими опциями компилируется, но ошибается вроде как на этапе инициализации nrf.

В файле make действительно можно прописать все опции. Но у него довольно сложный синтаксис.

Поэтому существует cmake. Вы пишете все настройки в CMakeList.txt, а потом с помощью cmake генерируете make файл.

Далее с помощью make генерируется бинарный файл, который можно выполнить.

В зависимости от типа библиотек их подключение может быть разным. Если библиотека устанавливается, то в cmake файле достаточно написать строчку добавления библиотеки:

```
add_library(name_of_your_library)
```
Лично я дополнительно пишу bash скрипт, который сначала использует cmake, потом make, а затем запускает файл.

Более подробно про cmake написано в водной статье на [хабре](https://habr.com/en/post/155467/)