cmake交叉编译

1、设置交叉编译之前,必须在CMakeList.txt前面加上这样一句,这样CMake才会认为你是要交叉编译:

SET(CMAKE_SYSTEM_NAMELinux)

  其中Linux是要编译过去的平台,如果你是在Linux下交叉编译Window的东西,就要写成Windows了。我是在Linuxx86Linuxarm11,所以直接写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_COMPILERC语言编译器,CMAKE_CXX_COMPILEC++语言编译器。

4、设置完了这些以后,就要设置一下你的工程所依赖的库和头文件的位置了,这个很好办。先在CMakeList.txt里找FIND_PACKAGE提到的库,然后找这些库对应的FindXXX.cmake。一般来说,CMakeList.txt会通过INCLUDE引用FindXXX.cmake所在的目录的,如果实在没有线索,就用find-name *.cmake查找一把好了。

5、找到FindXXX.cmake以后,在FIND_PATHFIND_LIBRARY里面的路径上添加上你需要的库的路径就可以了。我在上面写的,就是我自己进行arm11交叉编译的路径,原来的都是系统路径,比如/usr/include等。

6、完成以后,cmake->make,就可以了。当然,不会一帆风顺,往往是你明明设置了路径,头文件和库文件分明在那里,可是它偏偏要么找不到,要么又找回了系统目录,那么这时候可以用MESSAGE打印一下,看看是不是没有执行到FIND_PATHFIND_LIBRARY,也注意一下CMAKE_FIND_ROOT_PATH_MODE_LIBRARYCMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLYNEVER这些有没有设置正确。最危险的错误是,找到是找到了,但是找到的是系统目录下的库,这样CMake还是正常的,但是编译是不能通过的,这就需要你认真查看CMake的日志和多打印消息检查了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值