繁体   English   中英

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

[英]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方面的一些评论/解决方案

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

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

    set()命令文档中

    FILEPATH :磁盘上文件的路径。 cmake-gui(1)提供了一个文件对话框。

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

    在此处输入图片说明

  2. 您可能应该设置策略CMP0005 :预处理程序定义值现在会自动转义NEW

     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}") 

参考

您是否正在寻找config.h.in方法和configure_file() CMake调用?

此外,C ++ 11和更高版本中包含原始字符串文字,因此R"(c:\\n.txt)"实际上与"c:\\\\n.txt"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM