Я (переключаюсь на) использую <std::experimental::filesystem>
в своем коде C ++ 14, и мне нужно иметь возможность собрать его с помощью GCC 5.x на Linux (и на самом деле на любом компиляторе с поддержкой C ++ 14, или, по крайней мере, соответствующие версии clang, msvc и, возможно, icc).
Теперь, когда я связываюсь, я получаю ошибки об отсутствии всех символов, связанных с файловой системой, например ::
foo.cpp:(.text+0x9cd): undefined reference to `std::experimental::filesystem::v1::__cxx11::path::_M_split_cmpts()'
Теперь, если я "вручную" добавлю зависимость к libstdc++fs
:
target_link_libraries(foo other_lib stdc++fs)
тогда все нормально связывается - но как мне обобщить это для любого компилятора с поддержкой C ++ 14?
Примечание: соответствующие части моего CMakeLists.txt
выглядят примерно так:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall" )
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_library(bar src/bar.cpp)
add_executable(foo src/foo.cpp)
target_link_libraries(foo bar other_lib)
*
(Когда я использовал boost::filesystem
, это было парадоксально проще - мне просто нужно использовать то, что FindBoost.cmake
произвело.)
** Использование -Wall
также является проблемой для других компиляторов.