编译库文件
转载(总结比较全面)
CMakeList1
CMakeList2
SLAMCMakeLists
使用add_library()实现
//编译库,pointtype是在project所在的目录下的;当使用include/my_point_type.h语句时会报错,所以单独创建了一个文件夹
step1:add_library(libpoint pointtype/my_point_type.h)
//这句是解决一个报错:不知道源文件.h所使用的语言
step2:set_target_properties(libpoint PROPERTIES LINKER_LANGUAGE CXX)
//add_executable() add_custom_target add_library()所生成的都是target,使用target_link_libraries的方式添加依赖库
step3:target_link_libraries(libpoint ${PCL_LIBRARIES})
//NOTE:也可以不适用上面的语句,直接使用以下两行也可以,libpoint写在${PCL_LIBRARIES}之前,库和主函数都依赖于PCL。
add_executable(hello src/main.cpp )
target_link_libraries(libpoint libpoint ${PCL_LIBRARIES})
add_subdirectory
add_subdirectory(child)编译child子文件夹。
add_subdirectory(child bin) 编译结果输出到bin目录中。
详解
CMAKE_BUILD_TYPE
debug版本的项目生成的可执行文件需要有调试信息并且不需要进行优化,而release版本的不需要调试信息但是需要优化。这些特性在gcc/g++中通过编译时的参数来决定的,如果将优化程度调到最高需要设置 -O3 ,最低的是 -O0 即不做优化,添加调试信息的参数是 -g -ggdb,如果不添加这个参数,调试信息就不会被包含在生成的二进制中
指定c++版本
三行命令可以达到一种根据需求改变c++版本的效果
当想要指定一个特定的C++版本时,推荐使用CMASE 3.1和以后的方法是使用CXX_STANDARD、CXX_STANDARD_REQUIRED和CXX_EXTENSIONS目标属性,或者使用它们的变量等效项来指定目标默认值。可以找到完整的详细信息,但短版本如下:
cmake_minimum_required(VERSION 3.1)
project(Example)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# ... Define targets, etc. as usual