cargo-newcpp 0.7.1

A cargo plugin for creating new C++ projects.
Documentation
For the CMakeLists.txt in the root directory:


cmake_minimum_required(VERSION 3.10)

# Set your project name here
project( t1 VERSION 1.0 LANGUAGES CXX DESCRIPTION "Project description here" )

# Setup CMake configuration options here
option(BUILD_UNIT_TESTS "BUILD_UNIT_TESTS Builds the unit test executable" ON) # to switch off: -DBUILD_UNIT_TESTS=OFF

# Set the C++ standard to use (change to your preferred version)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})

message ("===================================================================")
message ("Configuring ${PROJECT_NAME} Main exsecutable")
message ("===================================================================\n")


# Add your source files here (replace "main.cpp" with your actual source files)
set(SOURCES
    src/main.cpp
)

# Create an executable target from the source files
add_executable(${PROJECT_NAME} ${SOURCES})

# Set the include directories (replace "include" with your actual include path)
target_include_directories(${PROJECT_NAME} PUBLIC
    include
)

# Set any additional compiler flags if needed
# For example:
# target_compile_options(${PROJECT_NAME} PRIVATE -Wall -Wextra)

# If you have any external libraries to link against, use the following format:
# find_package(YourLibrary REQUIRED)
# target_link_libraries(${PROJECT_NAME} PRIVATE YourLibrary::YourLibrary)

# Optionally, you can enable testing with Google Test
if (BUILD_UNIT_TESTS)
    add_subdirectory(tests)
    enable_testing()
endif()

# Optionally, set the output directory for the built binaries
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

message("### Configuration complete ###\n\n")

Add some printouts to show various configure stages

Remove setting global includes but rather target include directories for the compiler to find the includes

Add a CMake option to switch off building the unit tests if unecessary
For the tests CMakeLists.txt:

message ("===================================================================")
message ("Configuring ${PROJECT_NAME} Unit Tests")
message ("===================================================================\n")

# Include Google Test using FetchContent
message("Fetching Google Test")
include(FetchContent)
FetchContent_Declare(
    googletest
    URL https://github.com/google/googletest/archive/refs/heads/master.zip # URL to Google Test repository
)
FetchContent_MakeAvailable(googletest)

# Search for units tests
file(GLOB_RECURSE TEST_SOURCES *.cpp)
set(TEST_SRC_FILES ${TEST_SOURCES})

# Add headers, if any (replace "header.h" with your actual header files)
message("Current Source Dir:" ${CMAKE_CURRENT_SOURCE_DIR})
# Add the test executable
add_executable(unit_tests ${TEST_SRC_FILES})
# Set the test include directories
target_include_directories(unit_tests PUBLIC ../include)
# Link the test executable with the main library and Google Test
target_link_libraries(unit_tests PRIVATE  gtest_main)

# Add the test to CTest
include(CTest)
include(GoogleTest)
gtest_discover_tests(unit_tests)




Again remove global includes rather set the include directory(ies)

Make the test code files auto-discoverable rather than having to modify this file for every new test