我目前正在努力加深对CMake的理解。我尝试在我的C ++项目中使用http://libqglviewer.com/introduction.html]LibQGLViewer作为第三方库。
关联子目录中的CMakeLists.txt如下所示,我有问题的部分是add_libary部分,为清楚起见省略了一些头文件和源文件
cmake_minimum_required (VERSION 3.5.1 FATAL_ERROR)
set(target_name QGLViewerQt5)
project(${target_name})
message(STATUS "BUILDING QGLViewer-2.7.0 FROM SOURCE!")
set(BASE_DIR QGLViewer)
set(VRENDER_DIR VRender)
set(CMAKE_AUTOMOC ON)
set(QGLheaders
${BASE_DIR}/camera.h
${BASE_DIR}/config.h
${BASE_DIR}/${VRENDER_DIR}/AxisAlignedBox.h
${BASE_DIR}/${VRENDER_DIR}/Exporter.h
)
set(QGLsources
${BASE_DIR}/camera.cpp
${BASE_DIR}/${VRENDER_DIR}/Exporter.cpp
)
add_library(${target_name} ${QGLsources} ${QGLheaders})
target_include_directories(${target_name}
PUBLIC .
)
target_link_libraries(${target_name}
${OPENGL_LIBRARIES}
Qt5::Core
Qt5::Widgets
Qt5::Xml
Qt5::OpenGL
)
set(CMAKE_AUTOMOC OFF)
install(TARGETS ${target_name} DESTINATION lib)
我的应用程序运行,一切都很好。
但是,我读到应该只包含带有add_library的源文件,然后使用 target_include_directories 来考虑相关的头文件。所以我将上面的部分改为
add_library(${target_name} SHARED ${QGLsources})
target_include_directories(${target_name}
PUBLIC
${PROJECT_SOURCE_DIR}/QGLViewer
${PROJECT_SOURCE_DIR}/QGLViewer/VRender
)
但现在,我在尝试制作项目时遇到错误
致命错误:QGLViewer / qglviewer.h:没有这样的文件或目录 编译终止。
你可以告诉我吗提前谢谢
PS:文件夹结构如下
答案 0 :(得分:1)
第一个,target_include_directories()
根据official docs target_include_directories(<target> [SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...] [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
具有以下语法,因为您看到可能会使用的关键字很少:
PRIVATE
:将目录添加到INCLUDE_DIRECTORIES
<target>
属性
INTERFACE
:将目录添加到INTERFACE_INCLUDE_DIRECTORIES
<target>
属性
PUBLIC
:将目录添加到INCLUDE_DIRECTORIES
INTERFACE_INCLUDE_DIRECTORIES
属性
那些属性怎么样:
<target>
- 包含搜索您在项目中使用的标题文件的目录列表INCLUDE_DIRECTORIES
- 包含搜索头文件的目录列表,但它有transitivity,这意味着您可以通过{{继承您的include目录到项目链接1}} 第二个,您的代码无法正常工作,因为您正在使用其他包含文件夹路径,您的源文件必须包含INTERFACE_INCLUDE_DIRECTORIES
之类的内容,但由于您不再包含根文件夹({{1}在您之前的代码中),但直接链接QGLViewer - 您必须键入target_link_libraries()
。为您使用的每个#include <QGLViewer/qglviewer.h>
修复此问题,或者将.
添加到#include <qglviewer.h>
。