如何正确包含我自己的标头?
CMake How to properly include my own headers?
我正在使用ros,现在我想编写自己的unittest。但我正在为此苦苦挣扎。也许你对我有什么建议?或者也许是一个解决方案?
my structure:
-catkin_ws
--build
--install
--src
----project1
----CMakeLists.txt
----package.xml
------include
--------prime_tables.h
--------sample1.h
------src
--------sample1.cpp
------tests
--------sample1_unittest.cpp
我的清单.txt:
cmake_minimum_required(VERSION 2.8.3)
project(project1)
find_package(catkin REQUIRED COMPONENTS roscpp rostest rosunit)
find_package(sample1)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp rostest
DEPENDS )
include_directories(include ${catkin_INCLUDE_DIRS})
if (CATKIN_ENABLE_TESTING)
catkin_add_gtest(project1 tests/sample1_unittest.cpp)
add_executable(add_test tests/sample1_unittest.cpp)
add_library(add include/sample1.h src/sample1.cpp)
target_link_libraries(add_test ${catkin_LIBRARIES})
target_link_libraries(add_test gtest)
target_link_libraries(add_test prime_tables)
target_link_libraries(add_test sample1)
endif()
我收到此错误:
[87%] Linking CXX exectuable
/usr/bin/ld -lprime_tables cannot find
/usr/bin/ld -lsample1 cannot find
问题出在哪里?你提一下,我对CMake不是很熟悉。
sample1.cpp
你想要并测试一个库,你想创建一个链接到这个库并运行单元测试的可执行文件?
一些基本的cmake信息:add_library
、add_executable
和target_link_libraries
的第一个参数是库/可执行文件的名称。因此,如果将链接库指定到此库或可执行文件,则必须再次使用此名称。
并在此处查看更多信息: http://wiki.ros.org/catkin/CMakeLists.txt http://docs.ros.org/jade/api/catkin/html/howto/format2/gtest_configuration.html
我的猜测是,你想要这样的cmake:
cmake_minimum_required(VERSION 2.8.3)
project(project1)
catkin_package(
INCLUDE_DIRS include
LIBRARIES ${PROJECT_NAME}
CATKIN_DEPENDS roscpp rostest
DEPENDS
)
include_directories(include
${catkin_INCLUDE_DIRS}
)
add_library(${PROJECT_NAME}_sample1
src/sample1.cpp
)
target_link_libraries(
${PROJECT_NAME}_sample1
${catkin_LIBRARIES}
)
if (CATKIN_ENABLE_TESTING)
catkin_add_gtest(${PROJECT_NAME}_test
tests/sample1_unittest.cpp
)
target_link_libraries(${PROJECT_NAME}_test
${PROJECT_NAME}_sample1
${catkin_LIBRARIES}
)
endif()
相关文章:
- 没有为自己的结构调用列表推回方法
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- C++从对象自己的类中删除对象
- 使用 std::optional,而不是自己的结构
- 子轴围绕父轴而不是他自己的轴旋转
- 为用户定义的类正确调用复制构造函数/赋值运算符
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- C++ 如何为自己的迭代器类从迭代器转换为const_iterator?
- 重载 + 自己的类和 std::string 的运算符
- 如何正确包含我自己的标头?
- 如何在 c++ 中正确读取 GRC 块"Random Source"的字节输出数据到自己的 OOT 块中?
- 返回自己的类型的模板类方法的正确签名
- 如何在我自己的C 中正确使用矩阵(EIGEN库)
- GCC 或 Clang 关于函数参数在其自己的默认参数中的范围内的名称是否正确?
- 我创建了自己的智能指针类,我用这个智能指针指向一个类实例,如何正确返回智能指针
- 使用我自己的list.sort()逻辑,试图模仿其他来源,为什么我会因为看似正确的格式而出错
- 正确地将 cv::Mat 替换为自己的投资回报率 (opencv)
- 为什么我的MinHeap对整数排序正确,但我自己的类却不正确
- C++ - 为学校构建自己的字符串类,无法正确重载<运算符