cmake交叉编译

来源:互联网 发布:兔子网络加速器 编辑:程序博客网 时间:2024/05/18 03:08

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的日志和多打印消息检查了。

原创粉丝点击