Могу ли я пропустить тесты компилятора cmake или избежать "ошибки: непризнанная опция" -rdynamic "
параметры компиляции cmake (в окнах) для целевой системы ARM, но когда я запускаю configure, он запускает тесты компилятора:
CMake Error at D:/Program Files/CMake 2.8/share/cmake-2.8/Modules/CMakeTestCCompiler.cmake:52 (MESSAGE):
The C compiler "D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" is not
able to compile a simple test program.
It fails with the following output:
Change Dir: D:/merge/complex/build/CMakeFiles/CMakeTmp
Run Build Command:D:/PROGRA~1/YAGART~1/bin/make.exe "cmTryCompileExec/fast"
D:/PROGRA~1/YAGART~1/bin/make.exe -f
CMakeFiles/cmTryCompileExec.dir/build.make
CMakeFiles/cmTryCompileExec.dir/build
make.exe[1]: Entering directory
'D:/merge/complex/build/CMakeFiles/CMakeTmp'
"D:/Program Files/CMake 2.8/bin/cmake.exe" -E cmake_progress_report
D:/merge/complex/build/CMakeFiles/CMakeTmp/CMakeFiles 1
Building C object CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o
"D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe" -o
CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o -c
D:/merge/complex/build/CMakeFiles/CMakeTmp/testCCompiler.c
Linking C executable cmTryCompileExec
"D:/Program Files/yagarto/bin/arm-none-eabi-gcc.exe"
"CMakeFiles/cmTryCompileExec.dir/testCCompiler.c.o" -o cmTryCompileExec
-rdynamic
arm-none-eabi-gcc.exe: error: unrecognized option '-rdynamic'
make.exe[1]: *** [cmTryCompileExec] Error 1
Использование Yagatdo 4.6. * Кросс-компиляция toolchain
Как я могу пропустить эти тесты или исправить ошибку -rdynamic, которую я получаю?
Ответы
Ответ 1
Вы можете пропустить проверку компилятора, добавив NONE
к вашему project
:
project(<projectname> NONE)
но это может иметь довольно далеко идущие последствия. Для получения полной информации запустите
cmake --help-command project
Я не знаком с ARM, так что это, вероятно, не самый лучший вариант здесь. Я думаю, вам будет лучше узнать, есть ли способ исправить флаг -rdynamic
.
РЕДАКТИРОВАТЬ:
Похоже, что это было определено как ошибка, которая по-прежнему не решена. Комментарии в отчете об ошибке указывают на добавление следующих строк в качестве обходного пути (предположительно до вашего вызова project
):
set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
Ответ 2
Кажется, вы на самом деле нацелились на что-то еще, чем на Linux, поэтому вы должны сказать cmake, что вы кросс-компилируете для общего случая:
SET(CMAKE_SYSTEM_NAME Generic)
Далее следуют (необязательно, но приятно указать):
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_CROSSCOMPILING 1)
Однако, если вы укажете (что вы, вероятно, сделали, потому что это указано во многих примерах в Интернете):
SET(CMAKE_SYSTEM_NAME Linux)
Затем cmake загрузит файлы конфигурации из (предположим, версии 2.8) файла:
/usr/share/cmake-2.8/Modules/Platform/Linux.cmake
из которого он может загружаться:
/usr/share/cmake-2.8/Modules/Platform/Linux-GNU.cmake
Здесь флаг -rdynamic
установлен по историческим причинам:
macro(__linux_compiler_gnu lang)
# We pass this for historical reasons. Projects may have
# executables that use dlopen but do not set ENABLE_EXPORTS.
set(CMAKE_SHARED_LIBRARY_LINK_${lang}_FLAGS "-rdynamic")
endmacro()
Вместо того, чтобы отключать тесты, как это действительно делается, указывая NONE
как аргумент PROJECT
, кажется, что CMAKE_SYSTEM_NAME
(к чему-то другому, чем Linux
, например Generic
) - это то, что вы на самом деле хотите сделать.
Ответ 3
Вы можете установить флаг CMAKE_ <LANG> _COMPILER_WORKS, например:
set(CMAKE_C_COMPILER_WORKS 1)
для подавления дальнейших проверок компилятора.