Компилятор Visual Studio 2010 не может найти включенные в кавычки - PullRequest
1 голос
/ 19 июня 2010

Это мой первый опыт работы с миром окон за более чем десятилетие, так что это может быть простым решением.Но я полностью застрял.

Скажем, у вас есть исходный каталог,

mkdir helloworld && touch helloworld/helloworld.{h.cpp}

helloworld.cpp:

#include "helloworld.h"

using namespace std;

int main()
{
    cout << "Hello, World!" << endl;
    return 0;
}

helloworld.h:

#include <iostream>

Теперь у вас есть команда компиляции, которая выглядит следующим образом:

cl.exe helloworld/helloworld.cpp

Мое понимание стандартного поведения состоит в том, что поиск препроцессора для заключенных в кавычки включает в себя look

  • В том же каталогеисходного файла
  • ранее открытые файлы
  • указанное значение - я включаю пути
  • пути, найденные в среде INCLUDE

Теперь это очевиднопопадает в первую категорию, но я неизменно получаю:

Z:\Projects\temp>cl helloworld\helloworld.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

helloworld.cpp
helloworld\helloworld.cpp(1) : fatal error C1083: Cannot open include file: 'helloworld.h': No such file or directory 

Итак, когда я набирал это, у меня возникла случайная мысль ... "а вдруг это потому, что мой проект находится в общей файловой системе?".

Я копирую тот же проект в C: \, и он прекрасно компилируется!

Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

1 голос
/ 19 июня 2010

Хорошо, я понял это.Это было связано с общими папками vmware.Файл моих проектов был общим каталогом vmware.Чтобы решить эту проблему, мне пришлось напрямую сопоставить общий каталог в Windows и работать из этого.

Таким образом, для общей папки vmware с именем «Projects» вы должны сопоставить \ vmware-host \ Shared Folders \ Projects с Y: или с чем угодно.

После этого он только начал работать.

1 голос
/ 19 июня 2010

Запустите procmon.exe (загрузите его с sysinternals). Посмотрите, как CL открывает файл, какой sharemode и т. Д. Он сообщит вам, что запрос не выполнен. Вы сможете увидеть запрошенные варианты обмена. Он должен получить доступ для чтения через SHARE_READ (запрещает запись), что, вероятно, не понравилось вашему устройству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...