【问题标题】:Including Data (.json) FIles with cmake C++使用 cmake C++ 包含数据 (.json) 文件
【发布时间】:2019-06-01 02:23:32
【问题描述】:

我正在使用 Visual Studio 2017 并且正在使用 C++ 进行编码。我的代码有时会从 .json 文件中读取,但会收到一条错误消息,指出无法找到该文件。我假设这是因为 cmake 无法找到该文件。 .json 位于 cmake 文件所在目录的子目录中。我已经看到了很多关于包含具有相对路径的源文件的解决方案,但一个关于非源文件的解决方案。

我将如何使用 cmake 和相对路径包含我的数据文件?提前致谢!

编辑:我很抱歉最初没有提供更多信息!目录结构如下:

  • 项目目录
    • 子目录 1
      • CMakeList.txt A
      • 子目录 2
        • CMakeList.txt B
        • .cpp 源文件从 .JSON 文件中读取
        • 包含 .JSON 文件的子目录
          • .JSON 文件被引用

在不同的目录中有 2 个 CMakeList.txt 文件,包含我想在 C++ 代码中使用的 .JSON 文件的子目录位于最低级目录中。

目前,CMakeList.txt B 使用: add_executable(execName ${SOURCE_FILES}) 生成可执行文件。 我尝试将该行修改为: add_executable(execName ${RELATIVE_PATH_TO_JSON_FILES} ${SOURCE_FILES}) ,但不幸的是,这并没有奏效。

【问题讨论】:

  • 如果您在cmake中使用install()命令,请提供您的CMakeLists.txt。如果您在 cmake 中使用 execute_process()/exec_program(),请确保您指定了正确的工作目录。否则,您的问题与 cmake 无关。请在代码中为你的文件提供GetFullPathName()的输出,以及文件的实际绝对位置。
  • 感谢您的快速回复!如果有帮助,我已在原始帖子中添加了更多信息......我认为我根本没有使用 install() 或 execute_process()/exec_program()。但是,我对 CMake 也很陌生,几乎没有接触过它。提供的目录结构是否让问题更清晰一些?
  • CMake 不是那种为程序运行创建完整工作环境的构建系统。当您启动已编译的程序时,您当前所在的目录(可能与程序二进制文件所在的目录不同)成为您程序的工作目录,并且您的程序使用的所有相对路径都从那里解析。这就是我要求GetFullPathName() 输出的原因。

标签: cmake visual-studio-2017


【解决方案1】:

作为一个快速破解,您可以添加

add_definitions("-DPATH_TO_JSON=\"${CMAKE_SOURCE_DIR}/path/to/json.txt\")

到您的 CMakeLists.txt。之后,您可以在您的 C++ 代码中使用 PATH_TO_JSON 定义。

如果您希望您的应用在安装后能够访问该文件,则应在CMAKE_INSTALL_PREFIX而不是CMAKE_SOURCE_DIR上进行操作。

【讨论】:

    【解决方案2】:

    include_directories(${CMAKE_SOURCE_DIR}/path/to/json)

    【讨论】:

    • 对这行代码的描述肯定会有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2016-02-09
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多