CMake 及 CMakeLists.txt 使用小结

34 篇文章 0 订阅
31 篇文章 0 订阅

《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及,安装,以及如何使用外部共享库和头文件

https://www.cnblogs.com/52php/p/5681755.html

 

小结:

0. Cmake语句find_package()函数   https://blog.csdn.net/reasonyuanrobot/article/details/117338283

1.使用catkin时,对于自建未安装package作为依赖项时,需使用find_package(catkin   REQUIRED COMPONENTS package_1 package_1 );类似如下:

find_package(catkin  REQUIRED COMPONENTS
utils
apriltags
)

或者

使用find_package(package_1    REQUIRED ),需要对package_1的头文件和库文件进行显示关联。

find_package(catkin  REQUIRED COMPONENTS
)

find_package(utils  REQUIRED
)
find_package(apriltags  REQUIRED
)
include_directories(${utils_INCLUDE_DIRS} ${apriltags_INCLUDE_DIRS})


add_library(${PROJECT_NAME}  
    src/somes.cpp
   
)
target_link_libraries(${PROJECT_NAME}
   ${catkin_LIBRARIES}

   ${apriltags_LIBRARIES}
   ${utils_LIBRARIES}

  )

2. CMakeLists.txt添加opencv库注意事项 https://blog.csdn.net/u012816621/article/details/51732932

 

简易模板

- - 相关工程类比着写就行,模板中有相关注释说明

cmake_minimum_required(VERSION 2.8.12)

project(robot_server)

## 0. add definition
add_definitions(-std=c++11)
add_definitions(-DLINUXSOCKETS=1)  #use linux sockets for communication
add_definitions(-DBOOST_ERROR_CODE_HEADOR_ONLY)  # for boost

## 1.debug or release
# set(CMAKE_BUILD_TYPE Release)
set(CMAKE_BUILD_TYPE Debug)


## 2.find_package, catkin_package, include
find_package(catkin REQUIRED COMPONENTS 
 simple_message
)
find_package(Boost REQUIRED 
	system 
	thread
    yaml-cpp
	)   #for boost

if(NOT Boost_FOUND)
    message("NOT found Boost")
endif()

# include_directories(untitled ${Boost_INCLUDE_DIRS})
# link_directories(untitled ${Boost_LIBRARY_DIRS})
# target_link_libraries(untitled ${Boost_LIBRARIES})



catkin_package(
	CATKIN_DEPENDS
	DEPENDS
    INCLUDE_DIRS include
	LIBRARIES ${PROJECT_NAME}
	simple_message
)

include_directories(include ${catkin_INCLUDE_DIRS}
)
include_directories(${Boost_INCLUDE_DIRS})  # for boost
# include_directories(include/control  include/plan ${catkin_INCLUDE_DIRS}
# )


## 3.set src files; 生成库文件.a / .so  ; 连接相关依赖库文件link lib

set(SRC_FILES 
	src/common.cpp
	src/joint_trajectory_handler_download.cpp
	src/joint_trajectory_server.cpp
	src/robot_interface.cpp
	src/robot_state_server.cpp
	)
					
add_library(${PROJECT_NAME} 
	${SRC_FILES}
) # 生成库文件

target_link_libraries(${PROJECT_NAME}
	${catkin_LIBRARIES}
	simple_message
	pthread
	${Boost_LIBRARIES}
) # link lib


## 4. main() 生成可执行文件

add_executable(traj_server
src/joint_trajectory_server_node.cpp)
target_link_libraries(traj_server 
	${PROJECT_NAME}
	${Boost_LIBRARIES}
	)

add_executable(state_server
src/robot_state_server_node.cpp)
target_link_libraries(state_server 
   ${PROJECT_NAME}
   )





 

最外层CMakeLists.txt   --- 通用,无需更改

# toplevel CMakeLists.txt for a catkin workspace
# catkin/cmake/toplevel.cmake

cmake_minimum_required(VERSION 2.8.3)

set(CATKIN_TOPLEVEL TRUE)

# search for catkin within the workspace
set(_cmd "catkin_find_pkg" "catkin" "${CMAKE_SOURCE_DIR}")
execute_process(COMMAND ${_cmd}
  RESULT_VARIABLE _res
  OUTPUT_VARIABLE _out
  ERROR_VARIABLE _err
  OUTPUT_STRIP_TRAILING_WHITESPACE
  ERROR_STRIP_TRAILING_WHITESPACE
)
if(NOT _res EQUAL 0 AND NOT _res EQUAL 2)
  # searching fot catkin resulted in an error
  string(REPLACE ";" " " _cmd_str "${_cmd}")
  message(FATAL_ERROR "Search for 'catkin' in workspace failed (${_cmd_str}): ${_err}")
endif()

# include catkin from workspace or via find_package()
if(_res EQUAL 0)
  set(catkin_EXTRAS_DIR "${CMAKE_SOURCE_DIR}/${_out}/cmake")
  # include all.cmake without add_subdirectory to let it operate in same scope
  include(${catkin_EXTRAS_DIR}/all.cmake NO_POLICY_SCOPE)
  add_subdirectory("${_out}")

else()
  # use either CMAKE_PREFIX_PATH explicitly passed to CMake as a command line argument
  # or CMAKE_PREFIX_PATH from the environment
  if(NOT DEFINED CMAKE_PREFIX_PATH)
    if(NOT "$ENV{CMAKE_PREFIX_PATH}" STREQUAL "")
      string(REPLACE ":" ";" CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
    endif()
  endif()

  # list of catkin workspaces
  set(catkin_search_path "")
  foreach(path ${CMAKE_PREFIX_PATH})
    if(EXISTS "${path}/.catkin")
      list(FIND catkin_search_path ${path} _index)
      if(_index EQUAL -1)
        list(APPEND catkin_search_path ${path})
      endif()
    endif()
  endforeach()

  # search for catkin in all workspaces
  set(CATKIN_TOPLEVEL_FIND_PACKAGE TRUE)
  find_package(catkin QUIET
    NO_POLICY_SCOPE
    PATHS ${catkin_search_path}
    NO_DEFAULT_PATH NO_CMAKE_FIND_ROOT_PATH)
  unset(CATKIN_TOPLEVEL_FIND_PACKAGE)

  if(NOT catkin_FOUND)
    message(FATAL_ERROR "find_package(catkin) failed. catkin was neither found in the workspace nor in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was sourced before.")
  endif()
endif()

catkin_workspace()

 

使用socket通信时:

add_definitions(-DLINUXSOCKETS=1)  #use linux sockets for communication

否则可能会报错:

-  error: ‘sockaddr_in’ does not name a type
- error: ‘errno’ was not declared in this scope

使用boost库时的配置:

https://blog.csdn.net/reasonyuanrobot/article/details/106723854 CMakeLists.txt 中配置Boost库

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值