C++实际工作路径是什么?如何获取目标文件的对应相对路径?
C++工作路径规则及相对路径写法说明
工作路径的定义
C++程序的工作路径(当前工作目录)和Python规则完全一致,是你执行可执行文件时终端所在的目录,和源代码文件位置、可执行文件存放位置没有直接关系。
你的场景下的相对路径写法
你的项目根目录下有build、data、src三个子目录,可执行文件输出在build目录下,要访问data/exampleData分两种情况:
- 如果你在项目根目录下执行可执行文件,运行命令为
./build/[你的可执行文件名],此时工作路径为项目根目录,相对路径写./data/exampleData即可 - 如果你先进入build目录再执行可执行文件,运行命令为
cd build && ./[你的可执行文件名],此时工作路径为build目录,相对路径需要写../data/exampleData
常见误区说明
- 相对路径不是相对于
FileToRun.cc源代码的位置,源代码位置仅在编译阶段有效,运行时完全不相关 - 相对路径也不是默认相对于可执行文件的存放位置,除非你刚好在可执行文件所在目录启动程序
固定路径的解决方案
如果不想让路径依赖执行时的工作目录,可以在编译阶段把项目根路径作为宏传入代码:
比如用CMake构建的话,在CMakeLists.txt中加入:
add_definitions(-DPROJECT_ROOT="${CMAKE_SOURCE_DIR}")
之后在C++代码中就可以直接拼接绝对路径:
std::string data_path = std::string(PROJECT_ROOT) + "/data/exampleData";
这样不管你在哪个目录启动程序,都能正确找到文件。
内容的提问来源于stack exchange,提问作者Emilio7773
相关产品推荐
相关产品推荐

