Znajdowanie plików nagłówkowych przez msbuild

0

Mam dość dziwny według mnie problem związany z Visual Studio. Chodzi mianowicie o to, że buduję swój projekt najpierw wewnątrz, a potem zewnątrz IDE i dostaję różne wyniki. Wewnątrz IDE projekt buduje się poprawnie i wszelkie zewnętrzne biblioteki są linkowane. Na zewnątrz msbuild wyrzuca błędy, że nie może znaleźć pliku nagłówkowego biblioteki GLFW. Błąd jest dziwny według mnie dlatego, że wewnątrz IDE jest taki output:

1>Hello.vcxproj -> F:\Hello\x64\Debug\Hello.exe
1>Done building project "Hello.vcxproj"

Z tego wynika, że plik opisujący strukturę projektu jest skonstruowany poprawnie i zawiera wszelkie dane potrzebne do linkowania biblioteki. Tymczasem podczas próby zbudowania projektu przy użyciu msbuild:

msbuild Hello.vcxproj
F:\Hello\src\main.cpp(1,10): fatal error C1083: Nie można otworzyć pliku dołącz: 'GLFW/glfw3.h': No such file o
r directory [F:\Hello\Hello.vcxproj]

Jako screen dołączyłem sposób, w którym "instruuję" kompilator, że dodatkowy plik nagłówkowy ma szukać w odpowiednim folderze. Wewnątrz Visual Studio taki kod:

#include <GLFW/glfw3.h>

nie powoduje błędów. Dodatkowo spojrzałem do wnętrza pliku .vcxproj i mam takie oto linijki XML'a w nim:

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
     ...
      <AdditionalIncludeDirectories>$(SolutionDir)lib\include</AdditionalIncludeDirectories>
    </ClCompile>
...

Oczywiście folder $(SolutionDir)lib\include jest jak najbardziej poprawny i właśnie tam znajduje się plik nagłówkowy GLFW\glfw3.h, a msbuild nie może sobie poradzić z jego znalezieniem... Jak to możliwe? Czy ktoś wie może jak temu zaradzić i byłby chętny mi pomóc?

Jeśli zły dział to bardzo przepraszam i proszę o przeniesienie tematu.

1
Shizzer napisał(a):

Oczywiście folder $(SolutionDir)lib\include jest jak najbardziej poprawny i właśnie tam znajduje się plik nagłówkowy GLFW\glfw3.h, a msbuild nie może sobie poradzić z jego znalezieniem... Jak to możliwe? Czy ktoś wie może jak temu zaradzić i byłby chętny mi pomóc?

A czy $(SolutionDir) nie jest czasem u Ciebie puste? Przecież nie masz solucji (pliku .sln) tylko sam plik projektu.
https://docs.microsoft.com/en-us/cpp/build/reference/common-macros-for-build-commands-and-properties?view=msvc-160

"$(SolutionDir) The directory of the solution (defined as drive + path); includes the trailing backslash ''. Defined only when building a solution in the IDE."

Czyli poza IDE nie jest wypełniane.

1 użytkowników online, w tym zalogowanych: 0, gości: 1