这个问题很多时候被问到,我提到了所有问题,但我需要有点不同。
我正在使用macbook - > Clion(IDE)for C ++
我的程序文件位置
/Users/Kandarp/ClionProjects/SimulationParser/main.cpp
当我使用以下函数获取当前目录时,它会给出不同的文件(我认为编译和执行文件的实际路径)
string ExePath() {
char cwd[1024];
if (getcwd(cwd, sizeof(cwd)) != NULL) {
fprintf(stdout, "Current working dir: %s\n", cwd);
return cwd;
} else {
perror("getcwd() error");
return 0;
}}
它给出了以下答案:
/Users/Kandarp/Library/Caches/CLion2016.2/cmake/generated/SimulationParser-50b8dc0e/50b8dc0e/Debug
但我需要我的.cpp文件所在的路径。我做错了什么? 请帮忙
答案 0 :(得分:3)
你没有做错任何事。
getcwd()
为您提供执行过程的当前目录。
当您指示用于构建C ++代码的任何工具来运行它时,它只是从该目录运行该进程。
C ++库中没有任何内容告诉应用程序源代码的位置。
如果您需要应用程序知道其源代码所在的位置,则需要将其作为参数传递给main()
,或者将其放入某个配置文件,应用程序读取或任何类似的方法。
答案 1 :(得分:1)
您要做的是使用__FILE__
宏,然后使用基本标记化来提取目录名称。
您的方法不起作用,因为在执行期间,当前目录是二进制目录,而不是编译单元目录。