【发布时间】: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 文件被引用
- 子目录 1
在不同的目录中有 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()输出的原因。