drogonframework / drogonframework/drogon

Broken CMake configuration step if CMAKE_CXX_STANDARD is not set

Open
#2,392 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
14.3k
Forks
1.4k
Avg merge
1d 12h
Merged PRs (30d)
15

Description

**Describe the bug**
If CMAKE_CXX_STANDARD is not set before find_package(Drogon) then FindFilesystem.cmake will set it to an empty string:

In FindFilesystem.cmake:
```
...
# All of our tests required C++17 or later
set(BACKUP_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
set(CMAKE_CXX_STANDARD 17)
....
set(CMAKE_CXX_STANDARD "${BACKUP_CXX_STANDARD}")
```

Empty CMAKE_CXX_STANDARD breaks following commands in the main CMake file.

**To Reproduce**
```
cmake_minimum_required(VERSION 3.25)

project(drogon-test VERSION 0.0.0)

# This is a workaround
# set(CMAKE_CXX_STANDARD 17)
find_package(Drogon REQUIRED)

add_executable(drogon-test-app
main.cpp
)

# This is broken without the workaround
target_compile_features(drogon-test-app PUBLIC cxx_std_17)

target_link_libraries(drogon-test-app PRIVATE Drogon::Drogon)
```

**Expected behavior**
CMake configuration step must pass with no errors even if CMAKE_CXX_STANDARD is not set

**Desktop (please complete the following information):**
- OS: Ubuntu 24, latest Buildroot

**Additional context**
Proposed fix:

In FindFilesystem.cmake:
```
...
# All of our tests required C++17 or later
if (DEFINED CMAKE_CXX_STANDARD)
set(BACKUP_CXX_STANDARD "${CMAKE_CXX_STANDARD}")
endif()
set(CMAKE_CXX_STANDARD 17)
....
unset(CMAKE_CXX_STANDARD)
if(DEFINED BACKUP_CXX_STANDARD)
set(CMAKE_CXX_STANDARD "${BACKUP_CXX_STANDARD}")
endif()
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.