在 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方面的评论/解决方案
您应该使用
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.这确实在缓存条目的末尾添加了小
...
按钮:你应该设置策略
CMP0005
: Preprocessor definition values are now escaped automatically到NEW
cmake_policy(SET CMP0005 NEW)
如果用户手动粘贴包含反斜杠的文件路径,这将处理正确的转义。
您可以使用
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/