drogonframework / drogonframework/drogon
Broken CMake configuration step if CMAKE_CXX_STANDARD is not set
- 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
Assessment
This issue has not been assessed yet.