1、Find_package没有对应的cmake文件怎么处理?
SET(fastrtps_DIR /home/share/Lib_DIR)不行,
Find_package运行成功的最终目的是 在工程的顶层目录中的CMakeLists.txt 文件添加 include_directories(XXX_INCLUDE_DIRS) 来包含库的头文件,添加target_link_libraries(XXX_LIBRARIES)命令将源文件与库文件链接起来。
所以如果我们知道要链接的头文件和库路径,手动在cmakelist中添加两个目录就可以解决了
include_directories(/home/share/Lib_DIR/include)
link_directories(/home/share/Lib_DIR/lib)
2、is not able to compile a simple test program?
这种情况大概率是编译器或编译器环境没指定正确,检查下CC,GCC,和sysroot
cmake编译的话可以在cmakelist添加这三项内容
set(CMAKE_CXX_COMPILER "xxx_g++")
set(CMAKE_C_COMPILER "xxx_gcc")
set(CMAKE_SYSROOT sysroot_DIR),CMAKE_SYSROOT指定的目录下一般是/etc /lib /usr /var
3、有关交叉编译私有库目录的指定
#指定交叉编译环境,库和头文件的安装目录
SET(CMAKE_FIND_ROOT_PATH "/opt/arm-oe-linux-gnueabi/armv7")
也可以添加多个目录,set(CMAKE_FIND_ROOT_PATH path1 path2 path3 ...)
CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:
如果设置为 NEVER,那么 CMAKE_FIND_ROOT_PATH
就不会对 FIND_PROGRAM()
产生影响, FIND_PROGRAM()
不会在 CMAKE_FIND_ROOT_PATH
指定的目录中寻找;如果设置为 ONLY,那么 FIND_PROGRAM()
只会从CMAKE_FIND_ROOT_PATH
指定的目录中寻找;如果设置为 BOTH,那么 FIND_PROGRAM()
会优先从 CMAKE_FIND_ROOT_PATH
指定的目录中寻找,再从默认的目录中寻找。CMAKE_FIND_ROOT_PATH_MODE_LIBRARY,CMAKE_FIND_ROOT_PATH_MODE_INCLUDE,CMAKE_FIND_ROOT_PATH_MODE_PACKAGE也是同理。
常用的交叉编译配置如下
#从来不在指定目录下查找工具程序
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
#只在指定目录下查找库文件
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
#只在指定目录下查找头文件
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#只在指定目录下查找包
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
4、常用的configure编译参数
--host= 指定编译产物运行的系统
--prefix= 指定编译产物输出目录
CC= 指定gcc
--with-sysroot= 指定交叉编译的sysroot目录