带有QtCreator的ROS:自动完成
ROS with QtCreator: autocompletion
我正在使用并喜欢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
,我的解决方案与库不再工作。
有人知道另一种解决方案吗?!
更新:此解决方案不适用于QtCreator 3.6
我找到了解决自己问题的方法。不是那么有趣,但无论如何,我花了很多时间解决这个问题,所以这里是解决方案,希望对其他人有用:
使用 CMakeList 自动完成.txt在 QtCreator 3.5.1 中针对您自己的类:
- 创建包含所有类的库:
ADD_LIBRARY(myFilesLib src/class1.cpp ...)
- 添加可执行文件(主功能):
add_executable(${PROJECT_NAME} src/main.cpp)
- 将库链接到可执行文件:
target_link_libraries(${PROJECT_NAME} myFilesLib)
通过这种方式在库中,自动完成功能在QtCreator中起作用!
对于 ROS(猫金),不要忘记链接${catkin_LIBRARIES}
。
这里是整个CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
project(example_project)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
find_package(catkin REQUIRED COMPONENTS
roscpp
)
catkin_package()
include_directories(
include
${catkin_INCLUDE_DIRS}
${PROJECT_SOURCE_DIR}
)
# Create a library with all your classes
add_library(myFilesLib
src/class1.cpp
src/class2.cpp
src/class3.cpp
)
target_link_libraries(myFilesLib
${catkin_LIBRARIES}
)
# add your executable
add_executable(${PROJECT_NAME}
src/main.cpp
)
# link the library with your classes to the executable
target_link_libraries(${PROJECT_NAME}
${catkin_LIBRARIES}
myFilesLib
)
我不知道为什么它只在图书馆上工作,但它正在工作。也许有人有解释?!
这真的很烦人。最后,我想出了一个解决方案,它适用于Qt Creator 4.1.0,并且可能适用于其他版本。
- 正确编写
include_directories
,以便编译正常。 -
在
include_directories
下方,添加以下行。请注意,顺序很重要,以下行必须位于include_directories
下方。file(GLOB_RECURSE HEADERS */*.hpp */*.h)
-
在其中一个
add_executable
中添加${HEADERS} # for qtcreator...
。 例如:add_executable(slam_pp_node ${HEADERS} # for qtcreator... src/***.cpp )
-
以上应该足以解决自动完成问题。如果没有,请在 CMakeList 的末尾添加以下行.txt:
file(GLOB_RECURSE EXTRA_FILES */*) add_custom_target(${PROJECT_NAME}_OTHER_FILES ALL WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} SOURCES ${EXTRA_FILES})
祝你好运!
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 我可以存储数据的地方/C++,Linux,QtCreator
- QtCreator with C 库中的链接器问题
- 如何通过ROS将realsense数据传输到其他设备
- 如何使用realsense摄像头调试ROS错误消息
- 如何使用QtCreator将应用程序与"libqsqlpsql.so"链接?
- 如何使用 ROS 从 yaml 文件中读取带有元组的数组?
- ROS/C++:无法在 eclipse 中修复未解析的包含
- QTCreator No Rule
- ROS:谷歌制图师/地图
- 禁用QtCreator中的特定警告
- QtCreator使用CMAKE_C_FLAGS来解释C++(hpp)标头
- 如何在ROS中使用PCL可视化动力学数据的表面法线
- ROS 订阅回调 - 使用 boost::绑定成员函数
- 在cmake安装后从QtCreator运行项目
- ROS CPP 相当于 Python subprocess.call() 和 shell=True
- 使用 Python、ROS 和 C++ 进行日志记录
- QtCreator 不构建.(视窗)
- QtCreator 和 CMake:调试发布版本
- 带有QtCreator的ROS:自动完成