簡體   English   中英

CMake 如何正確包含我自己的標題?

[英]CMake How to properly include my own headers?

我正在使用 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

我的 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_libraryadd_executabletarget_link_libraries的第一個參數是庫/可執行文件的名稱。 因此,如果您將鏈接庫指定到此庫或可執行文件,則必須再次使用此名稱。

並在此處查看更多信息: http://wiki.ros.org/catkin/CMakeLists.txt http://docs.ros.org/jade/api/catkin/html/howto/format2/gtest_configuration.ZFC3568Z83E

我的猜測是,您想要這樣的 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM