gpt4 book ai didi

c++ - 来自 CMake 的文件路径作为 C++ 中的字符串

转载 作者:行者123 更新时间:2023-11-30 01:37:55 25 4
gpt4 key购买 nike

在 CMake 中,我有以下代码片段:

set(FILE_PATH "" CACHE STRING "Full path of the file")
add_definitions(-DFILE_PATH="${DATA_SET_PATH}")

在 C++ 代码中,我有这个片段:

std::string my_file_path = std::string(FILE_PATH);

除这种情况外,哪个效果很好:如果有人在 MS Windows 上将文件路径复制到 CMake GUI,如下所示:

C:\nnn.txt
__^____

代替:

C:/nnn.txt
__^____

或:

C:\\nnn.txt
__^^___

因为转义字符会导致问题。

除了告诉开发人员注意“\thing”之外,我还有什么选择可以解决这个问题?

我想用 / 替换所有单曲 \ 但我意识到没有什么叫做单曲 \ 并且你不能搜索单曲\ 如果它作为单个 \ 而不是双 \\ 注入(inject)到字符串中。

顺便说一句,非常感谢任何解决此问题的方法,即使它是在 CMake 级别而不是 C++ 代码级别。

最佳答案

这里有一些关于CMake方面的评论/解决方案

  1. 您应该使用 FILEPATH 而不是 STRING 缓存类型

    set(FILE_PATH "" CACHE FILEPATH "Full path of the file")

    来自set() command documentation :

    FILEPATH : Path to a file on disk. cmake-gui(1) offers a file dialog.

    这确实在缓存条目的末尾添加了小 ... 按钮:

    enter image description here

  2. 你应该设置策略 CMP0005: Preprocessor definition values are now escaped automaticallyNEW

    cmake_policy(SET CMP0005 NEW)

    如果用户手动粘贴包含反斜杠的文件路径,这将处理正确的转义。

  3. 您可以使用 file()命令规范化路径,如:

    set(FILE_PATH "" CACHE FILEPATH "Full path of the file")
    file(TO_CMAKE_PATH "${FILE_PATH}" FILE_PATH_NORMALIZED)
    add_definitions(-DFILE_PATH="${FILE_PATH_NORMALIZED}")

引用资料

关于c++ - 来自 CMake 的文件路径作为 C++ 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48847771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com