cmakelists.txt demo

cmake_minimum_required(VERSION 2.8)
project(pr)
#编译选项
#add_definitions("-DXXX")
# ${CMAKE_SOURCE_DIR}: The directory of root CMakeLists.txt
# ${CMAKE_CURRENT_SOURCE_DIR}: The directory of this CMakeLists.txt
#SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/CMakeModules/")
#LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules)
#设置编译模式
#set(CMAKE_BUILD_TYPE "Debug")
#IF(NOT CMAKE_BUILD_TYPE)
#  SET(CMAKE_BUILD_TYPE Release)
#ENDIF()
#使用Qt creater打开CMakeLists.txt需要有下面2行
#-O0:不优化 
#-Wall:显示所有警告 
#-g:利用操作系统的原生格式(native format)生成调试信息 
#-ggdb:使GCC为GDB生成专用的更为丰富的调试信息
#SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
#C++11
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#add_compile_options(-std=c++11)
#打开(1)或关闭(0)C++11特性
#if(CONAN_LIBCXX STREQUAL "libstdc++11")
#    add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)
#elseif(CONAN_LIBCXX STREQUAL "libstdc++")
#    add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
#endif()
#指定输出目录
#set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/libs)
#set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/build/bin)
#把${PROJECT_NAME}变量值的全小写赋值给变量LIBRARY_NAME
#STRING(TOLOWER ${PROJECT_NAME} LIBRARY_NAME)
#次级CMakeLists.txt所在路径
#ADD_SUBDIRECTORY(${LIBRARY_NAME})
#ADD_SUBDIRECTORY(examples)
#添加OpenCV
#set(OpenCV_DIR /home/XXX/software/OpenCV340/share/OpenCV)
#set(CMAKE_PREFIX_PATH /home/master/local_install/)
#find_package(OpenCV 3.1.0 EXACT REQUIRED)
#find_package(OpenCV REQUIRED)
#MESSAGE(STATUS "opencv version: ${OpenCV_VERSION}")
#include_directories(
#	${OpenCV_DIRS}
#	${OpenCV_INCLUDE_DIRS}
#)
#添加openni
#find_package(OpenNI2 REQUIRED)
#include_directories(
#	${OpenNI2_INCLUDE_DIR}
#)
#添加Eigen
#set(Eigen3_DIR /home/XXX/software/eigenunstable/share/eigen3/cmake)
#find_package(Eigen3 REQUIRED)
#include_directories(
#	${EIGEN3_INCLUDE_DIRS}
#	/usr/include/eigen3
#)
#添加G2O
#set(CMAKE_MODULE_PATH   ${PROJECT_SOURCE_DIR}/cmake ${CMAKE_MODULE_PATH}) #the location of FindG2O.cmake
#set(G2O_ROOT /home/XXX/software/g2o)
#set(G2O_DIR /home/XXX/software/g2o/share)
#在FindG2O.cmake中根据G2O_ROOT查找库和头文件
#find_package(G2O REQUIRED) 
#include_directories( 
#    ${G2O_INCLUDE_DIR}
#)
#link_directories(${G2O_ROOT}/lib)
#添加Boost
##set(BOOST_ROOT "/opt/boost")
#set(BOOST_ROOT /home/XXX/software/boost159)
##set(BOOST_LIBRARY_DIR "" CACHE PATH " directory of the boost lib")
##set(BOOST_INCLUDE_DIR "" CACHE PATH " directory of the boost headers")
##SET(BOOST_LIBRARYDIR "${BOOST_LIBRARY_DIR}")
##SET(BOOST_INCLUDEDIR "${BOOST_INCLUDE_DIR}")
##set(Boost_USE_STATIC_LIBS ON)
##set(Boost_USE_MULTITHREADED ON)
##set(Boost_USE_STATIC_RUNTIME OFF)
#find_package(Boost REQUIRED COMPONENTS
#	regex
#	filesystem
#	system
#	thread
#)
#if(NOT Boost_FOUND)
#	message("--Failed to find Boost.")
#endif()
#include_directories(
#	${Boost_INCLUDE_DIRS}
##	/opt/boost/lib
#)
#添加pcl
#set(PCL_DIR /home/XXX/software/pcl180/share/pcl-1.8)
#find_package(PCL REQUIRED)
#include_directories(${PCL_INCLUDE_DIRS})
#link_directories(${PCL_LIBRARY_DIRS})
#add_definitions(${PCL_DEFINITIONS})
#移除某个链接库(当它引起错误时,通过这条语句不再链接它)
#list(REMOVE_ITEM PCL_LIBRARIES "vtkproj4")
#set(BUILD_USE_64BITS on)
#第三方库路径 
#Equivalent to add "LD_LIBRARY_PATH" in ~/.bashrc
#link_directories(
#	${PROJECT_SOURCE_DIR}/libs
#)
#头文件路径
#include_directories(
#	${PROJECT_SOURCE_DIR}/include	#(project location)
#	${CMAKE_SOURCE_DIR}
#	include
#)
#生成库
#file(GLOB_RECURSE source_files ${CMAKE_CURRENT_SOURCE_DIR}/*.cc) #GLOB:不递归
#add_library(${PROJECT_NAME} #STATIC | SHARED | MODULE
#	${source_files}
#	src/lib/lib.cc
#)
#生成库需要的依赖
#target_link_libraries(${PROJECT_NAME}
#	${OpenCV_LIBS}
#	${EIGEN3_LIBS}
#)
#生成可执行文件
add_executable(run main.cc)
#生成可执行文件需要的依赖
#target_link_libraries(run
#	${OpenCV_LIBS}
#	${OpenNI2_LIBRARY}
#	${PROJECT_NAME}
#	g2o_core g2o_stuff
#	${Boost_LIBRARIES}
#	${PCL_LIBRARIES}
#	pthread
#)
#add_dependencies(run ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

 

### CMakeLists.txt 文件范例 对于一个简单的项目而言,`CMakeLists.txt` 可能非常简洁。例如,在仅包含单一可执行文件的情况下: ```cmake cmake_minimum_required(VERSION 3.6) project(SimpleProject) add_executable(runHelloWorld "helloworld.cpp") ``` 上述配置指定了最低版本需求,并定义了一个名为 `runHelloWorld` 的目标,它由单个源文件 `helloworld.cpp` 构建而成[^3]。 当涉及到更复杂的项目结构时,则需要更加详细的设置。考虑一个多层目录结构的应用程序,其中不仅包含了应用程序本身的代码,还集成了第三方库的支持。此时的 `CMakeLists.txt` 需要处理更多细节,比如指定子模块的位置以及链接所需的外部库: #### 主项目的根目录下的 `CMakeLists.txt` ```cmake cmake_minimum_required(VERSION 3.10) project(Demo VERSION 1.0 LANGUAGES C) set(CMAKE_C_STANDARD 99) add_subdirectory(src) add_subdirectory(3rd) ``` 此部分初始化了构建环境,设置了标准版本,并引入了两个主要组件——应用自身的源码(`src`) 和依赖项 (`3rd`)[^2]。 #### 应用源码所在目录中的 `CMakeLists.txt` 位于 `/Demo/src/CMakeLists.txt`: ```cmake include_directories(${PROJECT_SOURCE_DIR}/include ${CMAKE_BINARY_DIR}) file(GLOB SOURCES "*.c") add_executable(Demo ${SOURCES}) target_link_libraries(Demo PRIVATE mathApi) ``` 这段脚本负责收集所有的 `.c` 文件作为输入来创建最终的可执行文件 `Demo`,并且确保其能够访问必要的头文件路径。同时还将之前提到过的自定义数学API静态或共享库连接到了这个可执行文件上。 #### 第三方库目录内的 `CMakeLists.txt` 位于 `/Demo/3rd/CMakeLists.txt` : ```cmake find_library(MATH_LIB NAMES mathApi PATHS "${CMAKE_CURRENT_LIST_DIR}") if(NOT MATH_LIB) message(FATAL_ERROR "Failed to find the required library 'mathApi'") endif() install(TARGETS mathApi DESTINATION lib) install(DIRECTORY include/mathApi DESTINATION include/) ``` 这部分逻辑尝试定位预编译好的 `libmathApi.so` 动态库位置;如果找不到则会抛出错误提示。成功找到之后还会安排安装指令以便后续部署使用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值