我必须在一些位于不同目录的cpp文件中设置配置文件的路径。 有时它需要这条路径:
readFromFile("../Config/config.cfg");
另一次需要:
readFromFile("../../Config/config.cfg");
是否可以制作类似的东西?:
readFromFile("../*/Config/config.cfg");
它不起作用。怎么解决? 首先,我必须设置“../”从基本目录出去。
e.g。
+proj
|--+conf (dir)
| |--conf.cfg
|--+src (dir)
| |--A.cpp
| |--X.cpp
|--+test (dir)
| |--+make (dir)
| | |--B.cpp
代码A.cpp和B.cpp正在调用X.cpp,其中配置文件的路径是例如
“../conf/conf.cfg”
对于A.cpp,它s ok, but B.cpp can
找到“conf”目录。
1) compiling:
g++ ../SourceFiles/DBHandler.cpp ../SourceFiles/ParamServer.cpp ../SourceFiles/Functions.cpp ../SourceFiles/Main.cpp -o main && ./main
2) not compiling because of the wrong paths in DBHandler:
g++ ../../SourceFiles/Functions.cpp ../../SourceFiles/DBHandler.cpp ../DBHandlerTestSuite.cpp -o main && ./main
DBHandlerTestSuite.cpp的问题是从DBHandler调用静态方法(singleton)。 请注意'../'和'../../'。
答案 0 :(得分:0)
“当前目录”与cpp文件的路径无关..编译和链接后,您将获得一个可执行文件,“当前目录”与您运行可执行文件的位置有关。
例如:你在src /中有两个文件,a.cpp和b.cpp。然后在bin /
中将它们编译成a.exe+proj
|--+src
| |--a.cpp
| |--b.cpp
|--+bin
| |--a.exe
我这样做是为了执行a.exe:
cd <some dir>\proj\bin
a.exe
然后,当前目录为<some dir>\proj\bin
。
// X.cpp
void foo(const std::string &confpath)
{
std::string conf = confpath + "conf.cfg";
readFromFile(conf.c_str());
}
// A.cpp
foo("../conf");
// B.cpp
foo("../../conf");
您可以使用全局变量或init函数(例如InitializeXcpp(const std::string &confpath);
)来代替函数参数。 (对于cource,init函数应该将confpath存储到X.cpp的静态全局变量。)