ARMターゲットシステム)のcmake(Windows)のコンパイルオプションですが、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。*クロスコンパイルツールチェーンの使用
このテストをスキップしたり、発生している-rdynamicエラーを修正するにはどうすればよいですか?
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 "")
あなたは実際には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
)は、実際に実行したいことです。
フラグCMAKE_ <LANG> _COMPILER_WORKSを設定できます。例:
set(CMAKE_C_COMPILER_WORKS 1)
以降のコンパイラチェックを抑制します。
静的ライブラリをコンパイルしているだけで、コンパイラがバイナリを生成できることをテストで確認したくない場合は、変数CMAKE_TRY_COMPILE_TARGET_TYPE
を設定できます。
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
https://cmake.org/cmake/help/latest/variable/CMAKE_TRY_COMPILE_TARGET_TYPE.html