我正在使用和喜欢 QtCreator 来编码和构建我用c++编写的 ROS 项目。
不幸的是,我自己的头文件的自动完成功能不起作用:例如#include "LineTracker.hh"
构建项目完美无缺。并且其他外部包(如 ros 或 opencv)的自动完成功能也在工作。
更新 2.0:使用 QtCreator 3.6 解决方案不起作用
更新 1.0:找到解决方案,见底部!
这就是我的 CMakeLists.txt 的样子:
cmake_minimum_required(VERSION 2.8.3)
project(line_tracking)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(catkin REQUIRED COMPONENTS
roscpp
tf
sensor_msgs
image_transport
cv_bridge
)
catkin_package()
include_directories(
include
${catkin_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}
)
add_executable(${PROJECT_NAME}
src/line_tracking.cpp
src/EDLineDetector.cpp
src/LineTracker.cpp
)
target_link_libraries(${PROJECT_NAME}
${catkin_LIBRARIES}
)
# --- QT CREATOR STUFF ---
#Add all files in subdirectories of the project in
# a dummy_target so qtcreator has access to all files
FILE(GLOB children ${CMAKE_SOURCE_DIR}/*)
FOREACH(child ${children})
IF(IS_DIRECTORY ${child})
file(GLOB_RECURSE dir_files "${child}/*")
LIST(APPEND extra_files ${dir_files})
ENDIF()
ENDFOREACH()
add_custom_target(dummy_${PROJECT_NAME} SOURCES ${extra_files})
#
文件/包结构看起来像这样标准:
CMakeLists.txt
|
+ -- src
|
+ -- include
我如何调整我的 CMakeLists.txt 以使 QtCreator 找到我的标题以进行自动完成?
非常感谢您的帮助!
边注:
当我在 QtCeator 中使用 catkin 工作区的顶部 CMakeLists.txt 文件并将头文件包含在它们的包路径下时,如下所示:#include <packageName/include/headerFile.h>
自动完成工作但构建不再工作。因此,在编码期间获得自动完成只是一个糟糕且不友好的黑客攻击。
更新 1.0:
我找到了一个有效的解决方案:
我从所有具有头文件的(类)文件创建一个库,并将库链接到主文件,而不是将文件添加为可执行文件。我把它贴在这里作为答案。
但我不知道为什么它会这样工作,而不是没有通过图书馆的方式。有什么解释吗?
更新 2.0:
我刚刚升级到QtCreator 3.6
该库的解决方案,但我的解决方案不再工作了。
有人知道另一种解决方案吗?!