2016-11-07 5 views
0

В CLion с использованием Cygwin, когда я пытаюсь открыть определенный проект C++, я получаю следующую ошибку при анализе проекта CMake файл:CLion with Cygwin: g ++. Exe .../compiler-arguments.txt: Нет такой ошибки в файле или каталоге

Error:Configuration emdw [Debug] 
Compiler exited with error code 1: g++ -xc++ -Demdw_EXPORTS -I/cygdrive/c/Users/Dirk/.CLion2016.2/system/cmake/generated/emdw-e21eebc3/e21eebc3/Debug/src -I/cygdrive/f/devel/emdw/src -I/cygdrive/f/devel -I/cygdrive/f/devel/patrecII/src -std=c++11 -O3 -g -Wall -v -dD -E 
g++.exe: error: @/cygdrive/f/users/heetbeet/AppData/Local/Temp/compiler-arguments.txt: No such file or directory 
g++.exe: error: /cygdrive/f/users/heetbeet/AppData/Local/Temp/compiler-file: No such file or directory 
g++.exe: fatal error: no input files 
compilation terminated. 

Я принимаю его CLion генерировать эти типы файлов компилятор arguments.txt/компилятор файлы, так как нет таких инструкций не найдены в реальной структуре CMake. Обратите внимание, что я могу успешно запустить cmake.exe в этом проекте из bash Cygwin без каких-либо ошибок.

Какая магия CLION пытается достичь с помощью файла compiler-arguments.txt (если это CLion) и как начать отладку этой проблемы?

Я могу подтвердить, что при нажатии на кнопку Reload CMake Project в CLion,

enter image description here

два файла с именами compiler-arguments.txt и compiler-file действительно созданы в F:\users\heetbeet\AppData\Local\Temp (то есть в Cygwin /cygdrive/f/users/heetbeet/AppData/Local/Temp/).

Содержание compiler-arguments.txt является:

-xc++ -Demdw_EXPORTS -I/cygdrive/c/Users/Dirk/.CLion2016.2/system/cmake/generated/emdw-e21eebc3/e21eebc3/Debug/src -I/cygdrive/f/devel/emdw/src -I/cygdrive/f/devel -I/cygdrive/f/devel/patrecII/src -std=c++11 -O3 -g -Wall -v -dD -E -D___CIDR_IGNORE_DEFINITIONS_START 

compiler-file содержит кучу #if 'с, #ifdef-х, с первых 20 строк, как:

#define ___CIDR_IGNORE_DEFINITIONS_END 
#if !(defined (__has_extension)) && defined(__has_feature) 
    #define __has_extension __has_feature 
#endif 
#if !defined(__has_attribute) 
    #define __has_attribute(x) 0 
#endif 
#ifdef __has_feature 
#if __has_feature(cxx_constexpr) 
____CIDR_test_query_feature->cxx_constexpr=1 
#else 
____CIDR_test_query_feature->cxx_constexpr=0 
#endif 
#if __has_feature(cxx_trailing_return) 
____CIDR_test_query_feature->cxx_trailing_return=1 
#else 
____CIDR_test_query_feature->cxx_trailing_return=0 
#endif 
#if __has_feature(c_generic_selections) 
____CIDR_test_query_feature->c_generic_selections=1 
<...> 

ответ

1

Нам необходимо создать AST ваших исходных файлов. Чтобы все было правильно, нам нужны макросы и функции для компилятора для КАЖДОГО c/cpp-файла в вашем проекте, потому что вы можете изменить параметр компилятора для каждого из них. Так что это цена, которую вы платите за правильное выделение и макро-оценку в кросс-платформенном проекте.

О проблеме: вы используете cygwin, и я чувствую, что проблема может быть решена с помощью вызовов chmod 777.

+0

Thanks @uta. Теперь, когда я думаю об этом, мой Cygwin или мой «Администратор» в последнее время генерируют файлы со странными разрешениями. Поэтому вы считаете, что это проблема с разрешением файла. –

+0

Да, это мое предположение. Смесь POSIX и WIN32 хуже. Убедитесь, что у вас есть только одна подсистема unix в пути (Mingw xor cygwin xor power shell). И не изменяйте учетную запись для проекта (или оцениваемых привилегий), пока вы работаете с cygwin. Результат непредсказуем из-за «необычного» ACL/DACL в файлах, написанных cygwin utils. – uta

+0

Спасибо, я испортил права доступа к файлам, потому что я запустил Clion (или Cygwin, не могу точно запомнить) в качестве администратора. Не спрашивай меня, почему я был таким глупым. Спасибо за ваши глаза орла в определении проблемы, я буду более строг в своем использовании run-as-administrator в будущем! –