Clang 7 не может найти заголовок <filesystem>в Ubuntu 18.04 - PullRequest
0 голосов
/ 18 апреля 2019

Я написал CMakeLists.txt файл, как показано ниже для использования C ++ 17 <filesystem>. Это часть их.

cmake_minimum_required(VERSION 3.14)

...

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")

include(functions)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

enable_cxx_compiler_flag_if_supported("-Wall")
enable_cxx_compiler_flag_if_supported("-pedantic")

...

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
find_package(Boost 1.65.1 COMPONENTS filesystem regex system thread)
if(Boost_FOUND)
    add_executable(daemon 
                ...)
    target_compile_features(daemon PRIVATE cxx_std_17)
    target_include_directories(daemon PRIVATE ...)
    target_link_libraries(daemon ${Boost_LIBRARIES}) 

    # OS specific instructions.
    if(APPLE)
        find_library(CoreFoundation CoreFoundation)
        find_library(IOKit IOKit)
        target_link_libraries(daemon ${CoreFoundation} ${IOKit}) 
    elseif(WIN32)
        # Windows developer environment specific instructions.
        if(MINGW)
        elseif(MSYS)
        elseif(CYGWIN)
        endif()
    elseif(UNIX)
        // The problem is here. Why Clang cannot find <filesystem>???
        target_link_libraries(daemon c++fs dl)
    else()
    endif()
endif()

Я пробовал target_link_libraries(daemon stdc++fs dl) и set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -stdlib=libc++ -lc++abi"), но не сработало.

Коды ошибок:

cmake --build .
[1/2] Building CXX object CMakeFiles/daemon.dir/src/thread/serial_manager.cpp.o
FAILED: CMakeFiles/daemon.dir/src/thread/serial_manager.cpp.o 
/usr/bin/clang++   -I/home/koriel/.conan/data/boost/1.65.1/conan/stable/package/f410c60ac3ae66f96115aab74b1c5fbc1a6a4a45/include -I/home/koriel/.conan/data/bzip2/1.0.6/conan/stable/package/abc45b7dce3f5194dea2377c33229fa4f20706b4/include -I/home/koriel/.conan/data/zlib/1.2.11/conan/stable/package/abc45b7dce3f5194dea2377c33229fa4f20706b4/include -I../include/json -I../include/queue -I../src/base64 -I../src/message -I../src/serial -I../src/thread -Wall -pedantic   -DBOOST_USE_STATIC_LIBS -std=gnu++17 -MD -MT CMakeFiles/daemon.dir/src/thread/serial_manager.cpp.o -MF CMakeFiles/daemon.dir/src/thread/serial_manager.cpp.o.d -o CMakeFiles/daemon.dir/src/thread/serial_manager.cpp.o -c ../src/thread/serial_manager.cpp
../src/thread/serial_manager.cpp:43:10: fatal error: 'filesystem' file not found
#include <filesystem>
         ^~~~~~~~~~~~
1 error generated.
ninja: build stopped: subcommand failed.

1 Ответ

0 голосов
/ 18 апреля 2019

Несмотря на то, что <filesystem> включен в официальный libc ++ 7 , многие дистрибутивы его не включают.

Я только что посмотрел на Xcode 10.2 (который также поставляется с libc ++ 7) и я столкнулся с той же историей: в установке отсутствует заголовок filesystem.

Вы можете взглянуть на вашу установку libc ++, она должна быть где-то в /usr для системы Ubuntu (если выне знаю, где именно, просто запустите find /usr -name cstdint, это укажет вам на местоположение).Если в этой папке не найден заголовок filesystem, вы можете использовать boost::filesystem или установить clang 8, как только он станет доступен.

...