CMakeLists 的使用

CMakeLists 的使用

CMakeLists 1
PROJECT(hello_2) # 起一个项目名

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)   #cmake的最低版本

# 编译模式
set(CMAKE_BUILD_TYPE  "Release")


 FILE(GLOB SOURCE_1 "${CMAKE_SOURCE_DIR}/main/*.cpp") #下面2句告诉CMake,源文件在哪里?main.cpp
 FILE(GLOB SOURCE_2 "${CMAKE_SOURCE_DIR}/hello/*.cpp")#程序必须链接到hello.cpp里面的SayHello
 
 INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")#告诉CMake头文件在哪里?
 
 ADD_EXECUTABLE(hello_2 ${SOURCE_1} ${SOURCE_2}) #生成可执行文件
CMakeLists2
cmake中
PROJECT(hello)
cmake_minimum_required(VERSION 2.8)
SET(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../")   #工程的根目录,即test
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/") #可执行文件生成后存放的目录(CMAKE_SOURCE_DIR是cmake目录)
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/") #静态库生成后存放的目录

INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/include/") #告诉CMake头文件在哪里?
LINK_DIRECTORIES("${CMAKE_SOURCE_DIR}/lib/")#告诉CMake静态库在哪里?

ADD_SUBDIRECTORY(src) #多目录,把src目录加进来,src里面才是真正编译main和hello的
src中
ADD_SUBDIRECTORY(main)
ADD_SUBDIRECTORY(hello)
hello中
FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/hello/hello.cpp")  #告诉CMake,源文件在哪里?
ADD_LIBRARY(hello STATIC ${SOURCE_1}) #打包成hello静态库 *.a---如果想生成动态库*.so,将STATIC变为SHARED
main中
FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/main/main.cpp")
ADD_EXECUTABLE(main ${SOURCE_1})  #生成可执行文件
TARGET_LINK_LIBRARIES(main hello) #并在可执行文件上连接到这个库
CMakeLists 整理
# 设置你的CMake的最低版本
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
# 起一个项目名
project(text)
# 编译模式
set(CMAKE_BUILD_TYPE  "Release")
set(CMAKE_CXX_FLAGS "-std=c++11 -O2")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)

# 添加cmake模块路径

find_package(OpenCV REQUIRED)
find_package(Pangolin REQUIRED)
#find_package( G2O )
find_package( Sophus REQUIRED )
#include_directories("/usr/include/eigen3" ${OpenCV_INCLUDE_DIRS} ${Pangolin_INCLUDE_DIRS} ${G2O_INCLUDE_DIRS})
include_directories("/usr/include/eigen3" ${OpenCV_INCLUDE_DIRS} ${Pangolin_INCLUDE_DIRS} ${Sophus_INCLUDE_DIRS})
set( G2O_LIBS
        g2o_core g2o_types_sba g2o_solver_csparse g2o_stuff g2o_csparse_extension
        )
add_executable(Direct direct_method.cpp)
target_link_libraries(Direct ${OpenCV_LIBS} ${Pangolin_LIBRARIES} ${Sophus_LIBRARIES})




ADD_EXECUTABLE(sayhello useHello.cpp)
# 找主文件
# find_package()
# 添加头文件(即hello.c所在的位置)   ${PROJECT_SOURCE_DIR}指的是原文件的路径
#include_directories(~/1/lianxi/1/ch1/src)
include_directories(${PROJECT_SOURCE_DIR}/src)
#include_directories(${PROJECT_SOURCE_DIR}/src)   #会报错因为sayhello.cpp在code下,,如果在主文件下或在hello.h在其目录下(或在其子目录下)可以用${PROJECT_SOURCE_DIR}


#添加库//https://cmake.org/cmake/help/latest/command/find_package.html
#sophus
#  为使用 sophus,需要使用find_package命令找到它并赋给Sophus_INCLUDE_DIRS
find_package(Sophus REQUIRED)  
include_directories(${Sophus_INCLUDE_DIRS})
#Pangolin生成一个libPangolin动态链接库
find_package(Pangolin REQUIRED)
include_directories(${Pangolin_INCLUDE_DIRS})
# 添加Eigen头文件
include_directories( "/usr/include/eigen3" )

# 添加g2o的依赖
# 因为g2o不是常用库,要添加它的findg2o.cmake文件
LIST( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules )
SET( G2O_ROOT /usr/local/include/g2o )
FIND_PACKAGE( G2O )
# CSparse
FIND_PACKAGE( CSparse )
INCLUDE_DIRECTORIES( ${G2O_INCLUDE_DIR} ${CSPARSE_INCLUDE_DIR} )



# 编译动态链接库
# hello 决定输出为labhello.so
add_library(hello SHARED ${PROJECT_SOURCE_DIR}/src/hello.cpp)
# 与源文件建立联系
TARGET_LINK_LIBRARIES(sayhello hello)
# hello.h 放到/usr/local/include下面  .h-->FILES
INSTALL(FILES hello.h DESTINATION /home/zhe/usr/local/include)

# libhello.so 放到/usr/local/include下面   .so-->TARGETS
INSTALL(TARGETS hello DESTINATION /home/zhe/usr/local/lib)

# 编译主文件
ADD_EXECUTABLE(sayhello useHello.cpp)
# 与源文件建立联系
TARGET_LINK_LIBRARIES(sayhello hello)

# 添加外部文件夹(添加子目录) //https://cmake.org/cmake/help/latest/command/add_subdirectory.html
ADD_SUBDIRECTORY(src)
# ADD_SUBDIRECTORY(code bin)



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值