[我使用CMake在Ubuntu 14.04中构建C ++源文件。
我有一个主要的源文件。这包括一个头文件,该头文件在另一个源文件中包含一个函数。
我的主要源文件是DisplayImage.cpp,我的头文件是Camera.h,源文件是Camera.cpp。
每个文件都位于一个文件夹中。我有一个CmakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp Camera.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
当我在终端中执行命令cmake .
时,它配置成功。之后,我执行命令make
,然后收到一个致命错误:
fatal error: Camera.h: No such file or directory
请帮助我。我的CmakeLists.txt错误吗?
您应使用target_include_directories()
告诉CMake将包含标题的特定包含目录与target_include_directories()
目标相关联。假设您的DisplayImage
文件与Camera.h
在同一目录中,则可以使用Camera.cpp
指定此目录。您还应该在此处添加CMAKE_CURRENT_SOURCE_DIR
,如“在CMake中使用OpenCV” CMAKE_CURRENT_SOURCE_DIR
所示。
${OpenCV_INCLUDE_DIRS}
注意:总是在tutorial命令中指定作用域参数(例如cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage DisplayImage.cpp Camera.cpp )
target_include_directories(DisplayImage PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${OpenCV_INCLUDE_DIRS}
)
target_link_libraries( DisplayImage PRIVATE ${OpenCV_LIBS} )
,PUBLIC
或PRIVATE
)是CMake的一种好做法。