[英]File path from CMake as string in C++
在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”以外,我还需要解决什么问题?
我想更换所有单曲\\
与/
但我意识到,没有什么所谓的单\\
你不能搜索单个\\
如果它的字符串作为唯一在注射\\
而不是双\\\\
。
顺便说一句,任何解决此问题的方法都值得赞赏,即使它处于CMake级别而不是C ++代码级别。
这是CMake方面的一些评论/解决方案
您应该使用FILEPATH
而不是STRING
缓存类型
set(FILE_PATH "" CACHE FILEPATH "Full path of the file")
从set()
命令文档中 :
FILEPATH
:磁盘上文件的路径。 cmake-gui(1)提供了一个文件对话框。
这确实会在缓存条目的末尾添加小...
按钮:
您可能应该设置策略CMP0005
:预处理程序定义值现在会自动转义为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}")
参考
您是否正在寻找config.h.in
方法和configure_file()
CMake调用?
此外,C ++ 11和更高版本中包含原始字符串文字,因此R"(c:\\n.txt)"
实际上与"c:\\\\n.txt"
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.