使用 C++ 中的 CMAKE 项目代码内的相对路径创建/转储文件

问题描述 投票:0回答:1

我有一个这样的项目结构-

|Project
|--data
|  |--assets
|     |--file1.txt
|     |--file2.txt  
|--Module
|  |--src
|     |--dumpFileToAssets.cpp
|--build
|  |--out.exe

二进制文件被写入

build/out.exe
。因此,根据我的理解,相对路径是生成的二进制文件的路径。

代码片段来自

dumpFileToAssets.cpp

完整路径有效 -

std::string path = "/Users/Username/Project/data/assets/file1.txt"
ofstream myfile;
myfile.open (path);  
myfile << "Writing this to a file.\n";
myfile.close();

构建目录的相对路径不起作用 -

含义

file1.txt
不是在
.open()
调用中生成的,因此未写入 -

std::string path = "./../data/assets/file1.txt"
ofstream myfile;
myfile.open (path);  
myfile << "Writing this to a file.\n";
myfile.close();

问题 - 我的理解

any relative path inside the code is wrt to the binary path where the binary is generated
正确吗?

或者我可以访问代码内的

Project
根路径来实现此目的吗??

c++ cmake file-io
1个回答
0
投票

您对工作目录的理解不正确。有多种方法可以运行您的应用程序,并且每次的工作目录都不同

cd /Users/Username/Project/
./build/out.exe

工作目录为/Users/用户名/Project/

cd build
./out.exe

工作目录是/Users/用户名/Project/build

mkdir sub
cd sub
../out.exe

工作目录是/Users/用户名/Project/build/sub

在 Windows 上,工作目录甚至可能是不同的驱动器:

D:
cd \test
C:\Users\Username\Project\build\out.exe

工作目录为D:est

如果您想打开与可执行文件相关的文件,那么首先确定可执行文件的路径,这并不简单。请注意,

argv[0]
可能是符号链接,而不是可执行文件本身(就像
less
是指向
more
的链接)。

© www.soinside.com 2019 - 2024. All rights reserved.