Hoje resolvi criar um arquivo .sh para facilitar a criação de projetos em C++
Optei por uma estrutura de diretórios bem simples, você pode facilmente alterar o arquivo .sh conforme o seu ideal de projeto.
Esse arquivo gerador de projetos, também cria um exemplo de projeto com arquivos fontes separados, gerando também um arquivo chamado compila.sh que faz exatamente isso compilar o seu projeto.
Espero que possa ajudar quem está iniciando nessa linguagem de programação, e até alguns mais experientes que possam se beneficiar dessa dica.
Vou considerar que você já tem o GCC e o MAKE instalado no seu Linux.
#!/usr/bin/env bashset -eif [ "$#" -ne 1 ]; then echo "Uso: $0 nome-do-projeto" exit 1fiPROJECT_NAME="$1"if [[ ! "$PROJECT_NAME" =~ ^[a-zA-Z0-9_-]+$ ]]; then echo "Erro: o nome do projeto deve conter apenas letras, números, '_' ou '-'." exit 1fiPROJECT_DIR="$PWD/$PROJECT_NAME"if [ -e "$PROJECT_DIR" ]; then echo "Erro: o diretório '$PROJECT_DIR' já existe." exit 1fimkdir -p "$PROJECT_DIR/src"mkdir -p "$PROJECT_DIR/build"cat > "$PROJECT_DIR/CMakeLists.txt" <<EOFcmake_minimum_required(VERSION 3.20)project($PROJECT_NAME LANGUAGES CXX)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)add_executable($PROJECT_NAME src/main.cpp src/pessoa.cpp)target_include_directories($PROJECT_NAME PRIVATE src)EOFcat > "$PROJECT_DIR/src/main.cpp" <<'EOF'#include <iostream>#include "pessoa.hpp"int main(){ Pessoa pessoa("Carlos Susviela"); std::cout << "Olá, " << pessoa.nome() << "!" << std::endl; return 0;}EOFcat > "$PROJECT_DIR/src/pessoa.hpp" <<'EOF'#ifndef PESSOA_HPP#define PESSOA_HPP#include <string>class Pessoa{public: explicit Pessoa(const std::string& nome); const std::string& nome() const;private: std::string nome_;};#endifEOFcat > "$PROJECT_DIR/src/pessoa.cpp" <<'EOF'#include "pessoa.hpp"Pessoa::Pessoa(const std::string& nome) : nome_(nome){}const std::string& Pessoa::nome() const{ return nome_;}EOFcat > "$PROJECT_DIR/src/compilar.sh" <<'EOF'#!/usr/bin/env bashset -eSCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"PROJECT_DIR="$(dirname "$SCRIPT_DIR")"BUILD_DIR="$PROJECT_DIR/build"echo "Configurando o projeto..."cmake -S "$PROJECT_DIR" -B "$BUILD_DIR"echo "Compilando o projeto..."cmake --build "$BUILD_DIR"echoecho "Compilação concluída com sucesso."echo "Executável gerado em:"echo "$BUILD_DIR"EOFchmod +x "$PROJECT_DIR/src/compilar.sh"echo "Projeto '$PROJECT_NAME' criado com sucesso em:"echo "$PROJECT_DIR"echoecho "Para compilar, no diretório src digite :"echoecho " ./compilar.sh "echo

No arquivo CMakeLists.txt você vai incluindo os novos fontes, pode mudar o nome do do arquivo executável.
cmake_minimum_required(VERSION 3.20)project(projeto1 LANGUAGES CXX)set(CMAKE_CXX_STANDARD 20)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_CXX_EXTENSIONS OFF)add_executable(MeuExecutavel src/main.cpp src/cliente.cpp src/cadastro.cpp src/relatorio.cpp src/geratxt.cpp)target_include_directories(MeuExecutavel PRIVATE src)
Dica extra e também importante, você sempre pode compilar todos os seus programas fonte usando:
g++ *.cpp -o programa
Claro que isso exige que estejam todos na mesma pasta










































