이 프로젝트는 나를 위해 무엇을하려고합니까?
Std :: FileSystem API를 플랫폼 전체에서 사용하기 쉽게 만들 수 있습니다.
[바젤 사용자가 아닌가? Gulrak/FileSystem을 직접 사용하십시오.]
정상적으로 std :: 파일 시스템을 사용할 수없는 이유는 무엇입니까?
C ++ 17에서도 MacOS 10.15, iOS/TVOS 13.0 및 WatchOS 6.0 이전에는 STD :: 파일 시스템을 사용할 수 없습니다. std :: fileSystem을 사용하려고하면 "오류 : '경로'가 불가능합니다 : 소개 ..."와 같은 오류가 발생합니다.
적어도 글을 쓰는 시점에서 대부분의 Apple 개발자는 그보다 더 오래된 OSS를 목표로하므로 std :: FileSystem을 백 포트해야합니다. 이 라이브러리는 std :: 파일 시스템을 사용하고 Apple 플랫폼에서 코드가 작동하도록하는 경우 유용합니다 :)
[이것은 또한 구형 C ++ 버전 (C ++ 11 on)에서 std :: 파일 시스템을 사용할 수 있지만 이것이 주요 동기는 아닙니다. 최신 C ++ 버전으로 업데이트하십시오!]
이것이 내 문제를 어떻게 해결합니까?
아래의 설정 스 니펫을 사용하여 #include "backport/filesystem.hpp" 사용한 다음 Apple 플랫폼을 대상으로하는 코드의 std :: 파일 시스템을 대체하는 대체품으로 fs ::를 사용하십시오.
후드 아래에서, 우리는 그것을 필요로하는 바이너리의 Gulrak/FileSystem (전용)으로 돌아갑니다. Gulrak/FileSystem은 std :: fileSystem과 API 호환이므로 그렇지 않으면 동일한 최신 코드를 작성할 수 있으며 STD :: FILESYSTEM 지원이 유비쿼터스이되면이 심에서 쉽게 전환 할 수 있습니다. (한 번에, 우리는 부스트 :: 파일 시스템에 빠졌지 만, API에는 STD :: 파일 시스템에 영감을 준 Boost :: 파일 시스템에도 불구하고 API에는 매우 성가신 차이가 충분했습니다.)
기본 설정 시간 : 2m
어떻게, 바젤 사용자?. STD :: FileSystem API를 즉시 사용해 보겠습니다.
여기에는 많은 텍스트가 있지만 우리는 철자를 철자하고 쉽게 만들려고 노력하고 있기 때문입니다. 문제가 있으면 알려주십시오. 우리는 당신의 도움을 더 좋고 더 완전하게 만드는 데 도움을주고 싶습니다. 그리고 우리는 당신을 돕고 싶습니다!
이 repo를 외부 WORKSPACE 으로 추가하여 아래 지침에 따라 최신 커밋으로 업데이트해야합니다.
load ( "@bazel_tools//tools/build_defs/repo:http.bzl" , "http_archive" )
# Hedron's std::filesystem Backport
# Lets you use the std::filesystem API on Apple platforms, where it wouldn't otherwise be available.
# (Deployment targets before macOS 10.15, iOS/tvOS 13.0, and watchOS 6.0)
# Just use fs:: as a drop-in replacement for std::filesystem.
# https://github.com/hedronvision/bazel-cc-filesystem-backport
http_archive (
name = "hedron_std_filesystem_backport" ,
# Replace the commit hash in both places (below) with the latest, rather than using the stale one here.
# Even better, set up Renovate and let it do the work for you (see "Suggestion: Updates" in the README).
url = "https://github.com/hedronvision/bazel-cc-filesystem-backport/archive/315416306204ce6bb2983b4a923815a7e89eb727.tar.gz" ,
strip_prefix = "bazel-cc-filesystem-backport-315416306204ce6bb2983b4a923815a7e89eb727" ,
# When you first run this tool, it'll recommend a sha256 hash to put here with a message like: "DEBUG: Rule 'hedron_std_filesystem_backport' indicated that a canonical reproducible form can be obtained by modifying arguments sha256 = ..."
)
load ( "@hedron_std_filesystem_backport//:workspace_setup.bzl" , "hedron_backport_std_filesystem" )
hedron_backport_std_filesystem () "@hedron_std_filesystem_backport" deps 에 추가하고 ...
# include " backport/filesystem.hpp "
fs::path p = ...API는 std :: FileSystem과 동일하며 fs ::
API 문서는 https://en.cppreference.com/w/cpp/filesystem을 참조하십시오.
그러나 우리는 제안이 있습니다 ...
보안 패치를 포함한 기본 라이브러리로 향상되기 때문에 최신 정보를 유지하는 것이 좋습니다.
기본적으로 이러한 종속성 (및 기타)을 최신 상태로 유지하기 위해 어느 시점에서 리노베이트 (또는 이와 유사한)를 설정하는 것이 좋습니다. [우리는 Renovate 나 다른 것과 관련이 없지만 굉장하다고 생각합니다. 새로운 버전을보고 검토 또는 자동 테스트를 위해 PRS를 보냅니다. 무료이며 설정하기 쉽습니다. 코드베이스에서 놀랍도록 유용했으며, 우리는 훌륭한 관리자와 협력하여 바젤 사용에 큰 도움이되었습니다. 그리고 그것은 공식 바젤 저장소에 사용됩니다.
지금은 그렇지 않다면이 단계로 돌아와서이 레포지어를보고 업데이트를보십시오. [또는 이봐, 아마도 우리에게 빠른 스타를주십시오. 메인 지점에 대한 최신 커밋은 원하는 커밋입니다. 따라서 릴리스 알림에 의존하지 마십시오. 새로운 커밋을 위해 수동으로 리노베이트 또는 설문 조사를 사용하십시오.
설정을 통해이를 만드는 방법. 휴대용 코드에서 STD :: FileSystem API를 쉽게 사용할 수있게됩니다.
C ++에 Bazel을 사용하는 경우 다른 툴링과 같은 다른 툴링을 원할 것입니다.