ITADN

Overzealous `/permissive-` breaks cross-compiled builds

#364Opennyoma-diamond 创建于 2026-02-02
N
nyoma-diamondcommented
Currently, the usage of `target_compile_options(fast_float INTERFACE /permissive-)` when the host compiler allows `/permissive` (as validated by `CHECK_CXX_COMPILER_FLAG(/permissive- FASTFLOAT_COMPILER_SUPPORTS_PERMISSIVE)`) is overzealous and breaks cross-compiled builds. For example, if the host is built using MSVC, but the downstream uses any non-MSVC compiler, compiling will fail with an error such as this: ``` clang: error: no such file or directory: '/permissive-' ``` This is an extension of #304/#305, which fixed a different edge of this issue. With the current approach (using `target_compile_options(fast_float INTERFACE /permissive-)`) the compiler flag gets propagated forward into the generated `fast_floats-targets.cmake` at build-time: ```CMake set_target_properties(FastFloat::fast_float PROPERTIES INTERFACE_COMPILE_FEATURES "cxx_std_11" INTERFACE_COMPILE_OPTIONS "/permissive-" INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include" ) ``` Which erroneously forces the consumer to use the `/permissive-` flag even if it's not relevant for the downstream compiler. This issue is particularly relevant when working with fast_float via [vcpkg](https://github.com/microsoft/vcpkg), as vcpkg makes it very easy to set up cross-compiling by building for the host development system with their compiler of choice, and then compile for the target using a different relevant compiler, allowing development for other OS's or to allow special compiler-specific features to be enabled/disabled at build time (in my case, my target builds are done using Clang++ as I need some of its features, but my host uses MSVC for speed and ease of setup).
1 条评论