Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$(ProjectDir) doesn't resolve to actual project

I am using Visual Studio for writing in c++. I try to use $(ProjectDir) macro to access the project directory

auto vertShaderCode = readFile("$(ProjectDir)shaders/vert.spv");

And unfortunately the macro doesn't resolve to actual path, but rather stays exactly as "$(ProjectDir).

ChatGPT suggested writing like this:

std::string projectPath = "$(SolutiontDir)";
auto vertShaderCode = readFile(projectPath + "shaders/vert.spv");

But it doesn't work as well. I have specifically added this macro in "Additional Include Directories" in project properties, but it still stays the same.

like image 448
TopologicalConductor Avatar asked Oct 21 '25 06:10

TopologicalConductor


2 Answers

$(ProjectDir) is an MSBuild macro, if you want to use it in code then you'll need to transfer its value as preprocessor macro in project settings MY_PROJECT_DIR="$(ProjectDir)" and then change code to readFile(MY_PROJECTS_DIR "shaders/vert.spv");. You may also need to deal with escape sequences by using RAW string literal MY_PROJECT_DIR=R"($(ProjectDir))" for example, but that's another story.

like image 50
user7860670 Avatar answered Oct 22 '25 19:10

user7860670


The MY_PROJECT_DIR="$(ProjectDir)" solution doesn't work for me. I get a Error C2001 newline in constant error.

The error happens because the $(ProjectDir) gets expanded to something like : D:\YourProjectDirectory\ and so then your macro definition becomes: MY_PROJECT_DIR="D:\YourProjectDirectory\", and the problem is in the \" at the end there: it makes the compiler think that you escaped the " character and that you want the " character inside the string, not to end the string. That's why it doesn't work. So instead what you need to do is to make it a raw string literal.

What worked for me is:

ProjectDir=R"$(ProjectDir)"
like image 27
KulaGGin Avatar answered Oct 22 '25 19:10

KulaGGin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!