Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何正确地包含我自己的标题?_C++_Cmake_Ros_Catkin - Fatal编程技术网

C++ 如何正确地包含我自己的标题?

C++ 如何正确地包含我自己的标题?,c++,cmake,ros,catkin,C++,Cmake,Ros,Catkin,我正在与ros合作,现在我想编写自己的单元测试。但我正在与之斗争。也许你有什么建议给我?或者是一个解决方案 my structure: -catkin_ws --build --install --src ----project1 ----CMakeLists.txt ----package.xml ------include --------prime_tables.h --------sample1.h ------src --------sample1.cpp ------tests --

我正在与ros合作,现在我想编写自己的单元测试。但我正在与之斗争。也许你有什么建议给我?或者是一个解决方案

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
my cmakelist.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
的第一个参数是库/可执行文件的名称。因此,如果指定链接到该库或可执行文件的库,则必须再次使用此名称

请查看此处以了解更多信息:

我的猜测是,你想要一个这样的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()

sample1.cpp
中,您想要并要测试一个库,您想要创建一个链接到此库并运行单元测试的可执行文件吗

一些基本的cmake信息:
add_library
add_executable
target_link_libraries
的第一个参数是库/可执行文件的名称。因此,如果指定链接到该库或可执行文件的库,则必须再次使用此名称

请查看此处以了解更多信息:

我的猜测是,你想要一个这样的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()

可能将您的
add_库
更改为
add_库(sample1src/sample1.cpp)
link_目录(${my_path})
可能将您的
add_库
更改为
add_库(sample1src/sample1.cpp)
链接_目录(${my_path})