C++ C++;使用CMake+;叮当作响,但针对Linux Arm的交叉编译

C++ C++;使用CMake+;叮当作响,但针对Linux Arm的交叉编译,c++,makefile,cmake,clang,cross-compiling,C++,Makefile,Cmake,Clang,Cross Compiling,我有一个使用MSYS和CodeSourcery.2011.09 for ARM作为编译器的现有环境。makefiles是构建所有可执行映像的工具,这些映像运行在定制的基于arm的硬件上,这些硬件将Linux作为操作系统运行 我希望更新环境以使用clang,并且害怕必须更新一堆makefiles。然后我想在cmake中做任何事情都可能更容易,它可以为我生成makefile。我从未使用过cmake,所以这也是一个很好的学习机会 所以在这里,我试图得到一个演示这个设置,我只是不能让cmake发挥好。我

我有一个使用MSYS和CodeSourcery.2011.09 for ARM作为编译器的现有环境。makefiles是构建所有可执行映像的工具,这些映像运行在定制的基于arm的硬件上,这些硬件将Linux作为操作系统运行

我希望更新环境以使用clang,并且害怕必须更新一堆makefiles。然后我想在cmake中做任何事情都可能更容易,它可以为我生成makefile。我从未使用过cmake,所以这也是一个很好的学习机会

所以在这里,我试图得到一个演示这个设置,我只是不能让cmake发挥好。我有一个“helloworld”测试文件,我可以通过在命令行上运行clang++并在所有需要的参数中执行pipping来构建并在目标上运行它

所以我知道我有我需要的,但我不能让我做我想做的。它似乎只是想用VisualStudio做点什么。我没有安装Visual Studio,对使用它也没有兴趣。我设定了为arm linux eabi构建的目标,但似乎没有成功

有没有人有一个好的教程可以让我的环境设置正确地使用cmake构建?正如我所说,我可以使用clangcli构建/运行良好。在cmake里,要做我想做的事真的很纠结,这让我很难堪

从error.log中可以明显看出,我不是在为arm构建,但我无法让cmake了解这一点

我已经尝试了许多变化:

SET(triple arm-linux-eabi) 
SET(CMAKE_C_COMPILER C:/LLVM/bin/clang.exe -v)
SET(CMAKE_C_COMPILER_TARGET ${triple}) 
SET(CMAKE_CXX_COMPILER C:/LLVM/bin/clang++.exe -v)
SET(CMAKE_CXX_COMPILER_TARGET ${triple})
但是我得到了以下错误

The output was:
1
clang version 3.9.0 (branches/release_39)
Target: i686-pc-windows-msvc
Thread model: posix
InstalledDir: C:\LLVM\bin
 "C:\\LLVM\\bin\\clang.exe" -cc1 -triple i686-pc-windows-msvc18.0.0 -emit-obj -mrelax-all -mincremental-linker-compatible -disable-free -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerId.c -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -target-cpu pentium4 -v -dwarf-column-info -debugger-tuning=gdb -resource-dir "C:\\LLVM\\bin\\..\\lib\\clang\\3.9.0" -internal-isystem "C:\\LLVM\\bin\\..\\lib\\clang\\3.9.0\\include" -internal-isystem C:/Program Files/Microsoft Visual Studio 10.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/include -internal-isystem C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include -fdebug-compilation-dir "C:\\Software\\Vivia\\6.x.x\\ui_test_new_tablet\\pluto\\bluetooth\\CMakeFiles\\3.6.1\\CompilerIdC" -ferror-limit 19 -fmessage-length 0 -fms-extensions -fms-compatibility -fms-compatibility-version=18 -fno-threadsafe-statics -fdelayed-template-parsing -fobjc-runtime=gcc -fdiagnostics-show-option -o "C:\\Users\\BYEE~1.DEK\\AppData\\Local\\Temp\\CMakeCCompilerId-c43d47.o" -x c CMakeCCompilerId.c
clang -cc1 version 3.9.0 based upon LLVM 3.9.0 default target i686-pc-windows-msvc
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 10.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
#include "..." search starts here:
#include <...> search starts here:
  C:\LLVM\bin\..\lib\clang\3.9.0\include
End of search list.
 "link.exe" -out:a.exe -defaultlib:libcmt -nologo "C:\\Users\\BYEE~1.DEK\\AppData\\Local\\Temp\\CMakeCCompilerId-c43d47.o"
clang.exe: error: unable to execute command: program not executable
clang.exe: error: linker command failed with exit code 1 (use -v to see invocation)
输出为:
1.
clang版本3.9.0(分支/发行版)
目标:i686 pc windows msvc
线程模型:posix
InstalledDir:C:\LLVM\bin
“C:\\LLVM\\bin\\clang.exe”-cc1-triple i686-pc-windows-msvc18.0.0-emit obj-mrelax all-mincremental linker compatible-disable free-disable llvm verifier-discard value names-main file name cmakecccompilerid.c-mrelocation model static-mthread model posix-mdisable fp elim-fmath errno-masm verbose-mconstructor alias-target cpu pentium4-v-dwart columinfo-调试器调优=gdb-resource dir“C:\\LLVM\\bin\\\\lib\\clang\\3.9.0”-内部isystem“C:\\LLVM\\bin\\\\\lib\\clang\\3.9.0\\include”-内部isystem C:/Program Files/Microsoft Visual Studio 10.0/VC/include-内部isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/include-内部isystem C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/include-内部isystem C:/Program Files/Microsoft Visual Studio 8/VC/include-内部isystem C:/Program文件/Microsoft Visual Studio 8/VC/PlatformSDK/Include-fdebug编译目录“C:\\Software\\Vivia\\6.x.x\\ui\U test\U new\U tablet\\pluto\\bluetooth\\CMakeFiles\\3.6.1\\CompilerIdC”-ferror limit 19-fmessage length 0-fms extensions-fms compatibility-fms compatibility version=18-fno threadsafe statics-fdelayed template parsing-fobjc runtime=gcc-FDDiagnostics show option-o“C:\\Users\\BYEE~1.DEK\\AppData\\Local\\Temp\\CmakeCompilerId-c43d47.o”-C CmakeCompilerId.C
clang-cc1版本3.9.0基于LLVM 3.9.0默认目标i686 pc windows msvc
忽略不存在的目录“C:/Program Files/Microsoft Visual Studio 10.0/VC/include”
忽略不存在的目录“C:/Program Files/Microsoft Visual Studio 9.0/VC/include”
忽略不存在的目录“C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include”
忽略不存在的目录“C:/Program Files/Microsoft Visual Studio 8/VC/include”
忽略不存在的目录“C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include”
#包括“…”搜索从这里开始:
#包括搜索从这里开始:
C:\LLVM\bin\..\lib\clang\3.9.0\include
搜索列表结束。
“link.exe”-out:a.exe-defaultlib:libcmt-nologo“C:\\Users\\BYEE~1.DEK\\AppData\\Local\\Temp\\cmakccompilerid-c43d47.o”
clang.exe:错误:无法执行命令:程序不可执行
clang.exe:错误:链接器命令失败,退出代码为1(使用-v查看调用)

感谢您的回复

在CMake中,使用执行交叉编译。手动准备或尝试在网络中查找。将CMake配置为使用MSYS生成器而不是VisualStudio生成器是完全不相关的问题。作为一种简单的方法,您可以将
-gmsys Makefiles
选项传递到
cmake
。谢谢,我已经做了更多,但我还有一个问题。cmake似乎正在删除我的windows路径中的“:”。有没有办法阻止这一切?我现在得到以下错误。clang++.exe:错误:没有这样的文件或目录:'/C/Users/username/Desktop/test/CMakeFiles/cmakemp/testcxcompiler.cxx'工具链文件有问题:在Windows主机上,当将路径传递到可执行文件时,CMake不应该在路径中剥离
,不应该将“\”替换为“/”。这基本上是我的工具链文件,有什么明显的错误吗?set(CMAKE_CXX_FLAGS”--sysroot/../../../../../../../Software/Vivia/Limited/ui_dev_ant/Sourcecode/common/arm sysroot/lts-12.04-target arm linux eabi-mcpu=cortex-a8-mfloat abi=softfp-mfpu=neon)set(CMAKE_CXX_编译器/../../../../../../../../LLVM/bin/clang++.exe)set(CMAKE_-RANLIB/../../../../../../../../codesource-2011.09/arm-none-linux-gnueabi/bin/RANLIB缓存内部字符串)集(CMAKE_-AR/../../../../../codesource-2011.09/arm-none-linux-gnueabi/bin/AR缓存内部字符串)集嗯,我不确定,但是MSYS本身使用Linux风格的路径,这可能就是为什么CMake为它生成这样的路径。因此,您
clang
安装应该理解这样的路径。否则,您可能需要使用生成器
MinGW Makefiles
:它生成Windows风格的路径。至于工具链文件,有变量which表示sysroot(它不仅仅是编译器标志)。此外,对于交叉编译,您需要设置变量。在CMake中,交叉编译是使用执行的。手动准备它或尝试在网络中查找它。将CMake配置为使用MSYS生成器,而不是