cmake交叉编译
来源:互联网 发布:兔子网络加速器 编辑:程序博客网 时间:2024/05/18 03:08
1、设置交叉编译之前,必须在CMakeList.txt前面加上这样一句,这样CMake才会认为你是要交叉编译:
SET(CMAKE_SYSTEM_NAMELinux)
其中Linux是要编译过去的平台,如果你是在Linux下交叉编译Window的东西,就要写成Windows了。我是在Linuxx86编Linuxarm11,所以直接写Linux就可以了。
2、在通知CMake要交叉编译以后,还要告诉CMake到哪个路径下去找库文件,因为在交叉编译的时候CMake是不会自动去系统默认的目录找库文件和头文件的:
SET(CMAKE_FIND_ROOT_PATH"/home/release/arm11/library/gnuarm-4.4.2/")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY)
其中的第一行,是告诉CMake查找的根目录是什么。后面分别是告诉CMake怎么查找编译时候的工具程序的位置、库的位置和头文件的位置。设置为NEVER表示不查找,设置为ONLY表示只在CMAKE_FIND_ROOT_PATH设定的目录下查找,设置为BOTH(这是默认选项)表示既可以在系统目录下查找,也可以在CMAKE_FIND_ROOT_PATH下查找。因为咱们是交叉编译,所以后两项的设置了ONLY,对于编译时调用工具,一般来说是需要在系统目录下查找的,不过我不需要所以设置为NEVER。
3、设置编译器:
SET(CMAKE_C_COMPILER"/usr/local/cross-tools/arm11/bin/linux-gnueabi-gcc")
直接把编译器的路径设置过去就可以了,CMAKE_C_COMPILER是C语言编译器,CMAKE_CXX_COMPILE是C++语言编译器。
4、设置完了这些以后,就要设置一下你的工程所依赖的库和头文件的位置了,这个很好办。先在CMakeList.txt里找FIND_PACKAGE提到的库,然后找这些库对应的FindXXX.cmake。一般来说,CMakeList.txt会通过INCLUDE引用FindXXX.cmake所在的目录的,如果实在没有线索,就用find-name *.cmake查找一把好了。
5、找到FindXXX.cmake以后,在FIND_PATH和FIND_LIBRARY里面的路径上添加上你需要的库的路径就可以了。我在上面写的,就是我自己进行arm11交叉编译的路径,原来的都是系统路径,比如/usr/include等。
6、完成以后,cmake->make,就可以了。当然,不会一帆风顺,往往是你明明设置了路径,头文件和库文件分明在那里,可是它偏偏要么找不到,要么又找回了系统目录,那么这时候可以用MESSAGE打印一下,看看是不是没有执行到FIND_PATH和FIND_LIBRARY,也注意一下CMAKE_FIND_ROOT_PATH_MODE_LIBRARY和CMAKE_FIND_ROOT_PATH_MODE_INCLUDE的ONLYNEVER这些有没有设置正确。最危险的错误是,找到是找到了,但是找到的是系统目录下的库,这样CMake还是正常的,但是编译是不能通过的,这就需要你认真查看CMake的日志和多打印消息检查了。
- CMake的交叉编译
- cmake交叉编译
- cmake交叉编译
- CMAKE交叉编译设置
- CMake交叉编译配置
- CMake交叉编译
- CMake交叉编译配置
- CMAKE 交叉编译
- cmake交叉编译配置
- CMake交叉编译配置
- CMake交叉编译配置
- CMake交叉编译
- cmake 交叉编译
- cmake交叉编译
- CMake交叉编译
- CMake之交叉编译
- CMake的交叉编译
- CMake交叉编译配置
- C#中的委托和事件(2)
- 倒读《西游记》
- linux编程-守护进程编写
- 3个著名加密算法(MD5、RSA、DES)的解析
- 杭电 HDU 1035 Robot Motion
- cmake交叉编译
- 如何用SQL语句获知SQL Agent服务是否启动
- [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
- 基于java的程序OutOfMemory问题的解决及Xms/Xmx/Xss的解释和应用
- oc基础
- Android时间机制
- ossec install.sh failed
- 南华大学暑假个人练习第一场 1006: Triangle
- iOS数据存储