#set(TEST_TOOLCHAIN_ROOT /opt/ti_components/os_tools/linux)#如果不编译arm,则注释掉这一项,如果是别的公司,用他们编译器工具下面变量即可 IF (DEFINED TEST_TOOLCHAIN_ROOT) message("==========:compile ARM, targetf ${TEST_TOOLCHAIN_ROOT}") message("==========:arm编译器路径:" ${TEST_TOOLCHAIN_ROOT}) add_definitions("-march=armv7-a -mthumb -mfpu=vfp -mfloat-abi=hard") set(TEST_COMPILER_ROOT "${TEST_TOOLCHAIN_ROOT}/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin") #CMAKE_SYSROOT是一个CMake变量,用于指定交叉编译工具链在目标设备上的根目录。交叉编译通常需要使用一个特定的工具链, #在编译时需要访问目标设备上的库和头文件。因此,使用CMAKE_SYSROOT变量可以告诉CMake去哪里查找这些文件。CMake会在指定的目录下查找包括库文件和头文件在内的所有文件,以便正确地构建交叉编译的可执行文件或库。 set(CMAKE_SYSROOT ${TEST_TOOLCHAIN_ROOT}/targetfs) set(CMAKE_CXX_COMPILER ${TEST_COMPILER_ROOT}/arm-linux-gnueabihf-g++) set(CMAKE_C_COMPILER ${TEST_COMPILER_ROOT}/arm-linux-gnueabihf-gcc) set(CMAKE_CXX_STANDARD 14) #1.-ggdb选项会生成特定于gdb的调试信息,以便在调试时更方便地使用gdb调试器。如果只使用-g选项,则会生成通用的调试信息, #可以在大多数调试器中使用,但可能不够详细 #2.-wall表示开启所有警告。它会让编译器输出所有可以输出的警告信息,包括潜在的错误、非标准的语法使用等。 #3.-O2 和 -g 的作用不同,-O2 主要是针对代码的优化,可以使代码更加高效,但是会减少调试信息;-g 主要是针对调试的需要, #可以增加调试信息,但是会减少代码的优化效果。因此,在编写调试版本的程序时,一般会同时使用 -g 和 -O0 选项,而在编写发布版本的程序时,一般会去掉 -g 选项,并加入 -O2 或其他优化选项,以提高程序的性能。 set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -Wall -g2 -ggdb")#需要gdb提供函数内联等 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -O3 -Wall") ELSE() message("==========:compile x86") add_compile_options(-std=c++14 -DLOCALCOMPILE) #==可以并列写多个编译选项 add_definitions(-O0) #==只能写一个编译选项 #set(CMAKE_CXX_FLAGS "-O0") #==添加编译选项 ENDIF() find_package(Eigen3 REQUIRED) include_directories(${EIGEN3_INCLUDE_DIRS}) include_directories( include ${PROJECT_SOURCE_DIR} ) add_library(ego SHARED src/ego_interface.cpp src/kf_interface.cpp src/base_measure.cpp src/imu_measure.cpp src/rtk_measure.cpp src/veh_measure.cpp src/vloc_measure.cpp src/check_measure.cpp )