Сломанный CMake и GCC под OS X

При запуске configure в cmake-gui на моей платформе OS X я получаю следующую ошибку:

 The C compiler identification is GNU The CXX compiler identification is GNU Checking whether C compiler has -isysroot Checking whether C compiler has -isysroot - yes Checking whether C compiler supports OSX deployment target flag Checking whether C compiler supports OSX deployment target flag - yes Check for working C compiler: /usr/bin/gcc-4.0 Check for working C compiler: /usr/bin/gcc-4.0 -- broken CMake Error at /Applications/CMake 2.8-2.app/Contents/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE): The C compiler "/usr/bin/gcc-4.0" is not able to compile a simple test program. It fails with the following output: Change Dir: /Users/bill/Desktop/cmake_test/build/CMakeFiles/CMakeTmp Run Build Command:/opt/local/bin/gmake "cmTryCompileExec/fast" /opt/local/bin/gmake -f CMakeFiles/cmTryCompileExec.dir/build.make CMakeFiles/cmTryCompileExec.dir/build gmake[1]: Entering directory `/Users/bill/Desktop/cmake_test/build/CMakeFiles/CMakeTmp' "/Applications/CMake 2.8-2.app/Contents/bin/cmake" -E cmake_progress_report /Users/bill/Desktop/cmake_test/build/CMakeFiles/CMakeTmp/CMakeFiles 1 Building C object CMakeFiles/cmTryCompileExec.dir/testCCompiler.co /usr/bin/gcc-4.0 -isysroot -o CMakeFiles/cmTryCompileExec.dir/testCCompiler.co -c /Users/bill/Desktop/cmake_test/build/CMakeFiles/CMakeTmp/testCCompiler.c i686-apple-darwin10-gcc-4.0.1: CMakeFiles/cmTryCompileExec.dir/testCCompiler.co: No such file or directory  

От взгляда на форумы и т. Д. В Интернете я установил, что это может быть связано с моей переменной PATH. Вот моя переменная PATH для анализа:

 ! echo $PATH /Library/Frameworks/Python.framework/Versions/Current/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/sw/bin:/sw/sbin:/Applications/MATLAB_R2012a.app/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin:/usr/X11/bin:/usr/X11R6/bin 

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


Еще несколько деталей. Программа сборки, указанная CMAKE_MAKE_PROGRAM является /opt/local/bin/gmake .

Я также обнаружил, что эти ошибки возникают только при запуске Configure в cmake-gui . В командной строке (запуск cmake .. из папки сборки) конфигурация завершается нормально:

 ! cmake .. -- The C compiler identification is GNU 4.0.1 -- The CXX compiler identification is GNU 4.2.1 -- Checking whether C compiler has -isysroot -- Checking whether C compiler has -isysroot - yes -- Checking whether C compiler supports OSX deployment target flag -- Checking whether C compiler supports OSX deployment target flag - yes -- Check for working C compiler: /usr/bin/gcc-4.0 -- Check for working C compiler: /usr/bin/gcc-4.0 -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Checking whether CXX compiler has -isysroot -- Checking whether CXX compiler has -isysroot - yes -- Checking whether CXX compiler supports OSX deployment target flag -- Checking whether CXX compiler supports OSX deployment target flag - yes -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Configuring done -- Generating done 

Однако компиляция не всегда успешна при использовании некоторых библиотек – см., Например, этот вопрос, который я задал здесь . Поэтому я думаю, что что-то может по-прежнему ошибиться в процессе cmake .

Некоторые замечания о вашем вопросе, которые могут привести к решению …

Вы используете CMake 2.8.2, который довольно старый, поскольку версии CMake идут. Попробуйте использовать 2.8.11 или кандидат на выпуск предстоящего 2.8.12, чтобы узнать, существует ли проблема. Если ничего другого, возможно, вы получите сообщение об ошибке.

См. Этот вопрос и ответ и его ссылки, чтобы узнать о различных способах обеспечения согласованных значений PATH между средами командной строки и приложениями GUI, запущенными с помощью других средств на Mac: как установить глобальную переменную среды PATH в OS X?

Графический интерфейс CMake не обязательно наследует одно и то же значение PATH, как вы видите в своем терминале, если только вы не запустили его из терминала с помощью команды open.

Здесь есть две другие вещи: GCC 4.0 – компилятор C, но g ++ 4.2 – это компилятор C ++. Почему они разные?

Кроме того, CMAKE_MAKE_PROGRAM указывает на /opt/local/bin/gmake . Это верно в обоих деревьях сборки? (Командная строка одна и GUI одна?) Мне кажется любопытным, что CMake собирал компиляторы C и C ++ из /usr/bin , но gmake из /opt/local/bin

Является ли ваша среда командной строки тщательно настроенной для использования именно этих инструментов с этих путей? Или это тоже неожиданно для вас?

Вы не упоминаете, какую версию инструментов Xcode вы используете вообще. Возможно, добавив, что к вашему вопросу поможет лучше ответить в чей-то мозг.

Последнее замечание: у вас много вещей в вашей PATH. Сведение к минимуму значения PATH, которое вы используете в ваших средах сборки, поможет вам избежать подобных проблем. Я от всей души рекомендую зачистить до минимума, который вам нужен, по крайней мере, для среды разработки программного обеспечения.

Извините за ответ без ответа, но этот комментарий слишком показателен для комментария Stack Overflow … 🙂

Я также столкнулся с этой проблемой, и я исправил ее, установив правильные CXXFLAGS и CPPFLAGS . Я думаю, вы также должны это проверить.

Одно из простых решений:

CPPFLAGS := $(CPPFLAGS) $(CFLAGS) CXXFLAGS := $(CXXFLAGS) $(CFLAGS)

Или вы должны проверить правильность вашей PATH . Вы должны иметь возможность найти компилятор CXX компилятор C в вашей текущей оболочке.