我想编译一个项目,以便能够将其用作其他项目中的库。更准确地说,它是一个基类,我希望我用来继承许多其他项目。
├── include
│ ├── MyBase.hpp
│ ├── ...
│ └── Utils.hpp
└── src
├── MyBase.cpp
├── ...
└── Utils.cpp
在我按照教程并调整了我的CMakeLists.txt
文件之后,现在它看起来像这样。
cmake_minimum_required(VERSION 2.8.3)
project(my_commons)
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
find_package(catkin REQUIRED COMPONENTS
roscpp
tf
)
catkin_package(CATKIN_DEPENDS tf
INCLUDE_DIRS include)
include_directories(
${catkin_INCLUDE_DIRS}
include/
)
###########
## Build ##
###########
add_library(my_commons SHARED
src/MyBase.cpp
src/Utils.cpp
)
## Specify libraries to link a library or executable target against
set_target_properties(my_commons PROPERTIES LINKER_LANGUAGE CXX)
target_link_libraries(my_commons
${catkin_LIBRARIES}
${roscpp_LIBRARIES}
)
install(DIRECTORY include/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
FILES_MATCHING PATTERN "*.hpp"
PATTERN ".svn" EXCLUDE)
# Install library
install(TARGETS my_commons
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
它编译得很好,但我不确定需要在其他项目的 CMakeFiles 中添加什么以及如何在那里使用它。
提前非常感谢你。
在上面包含的 CMakeLists.txt 文件中,您需要在catkin_package中添加库行,如下所示:
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS tf
)
然后在其他节点中,您将包包含在包中.xml:
<build_depend>my_commons</build_depend>
在 CMakeLists.txt 文件中,您需要找到my_commons包,并通过执行以下操作将其链接到您尝试构建的库或可执行文件:
find_package(catkin REQUIRED COMPONENTS
roscpp
my_commons
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS my_commons
)
target_link_libraries(${PROJECT_NAME}
${my_commons_LIBRARIES}
)