当前位置: 首页 > 知识库问答 >
问题:

Cmake关于建立小型图书馆的问题

孟健
2023-03-14

我目前正在努力加深对CMake的理解。我试着用http://libqglviewer.com/introduction.html]LibQGLViewer是我的一个C项目中的第三方库。

相关子目录中的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)

我的应用程序运行,一切都很好。

但是,我读到,应该只包含ADDILL库的源文件,然后使用TajyPixDebug目录考虑相关联的头文件。所以我把上面的部分改为

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:文件夹结构如下所示

共有1个答案

阳宾实
2023-03-14

首先,target_include_directories()根据官方文档target_include_directories(

  • PRIVATE:将目录添加到INCLUDE_DIRECTORIES属性

那些房产呢:

  • INCLUDE_目录-包含用于搜索项目中使用的头文件的目录列表
  • INTERFACE_INCLUDE_DIRECTORIES-也包含用于搜索头文件的目录列表,但它具有传递性,这意味着您可以继承INCLUDE目录,通过target_link_libraries()链接到项目中。

第二,您的代码无法工作,因为您正在使用另一个包含文件夹路径,您的源文件必须包含类似于#include的内容

 类似资料:
  • 我试着建立Gradle: 尝试:使用--info或--debug选项运行以获取更多日志输出。 这是我的等级。建造:

  • 我正在使用Fresco库将图像和GIF加载到我的应用程序中。我遇到的最大的限制是壁画的布局宽度和高度必须设置。因此,我设置了简单的付款人视图,如下所示: 我的问题是,如果图像的高度大于宽度,那么在图像的右边有很多空白(见附件),但是高度是好的 然后它可能发生在高度,如果实际图像小于宽度(见附件),所以这里,因为固定的高度是250dp,有很多空白的图像下面。

  • 我的目标是:正在使用和正在使用(应该链接库)(可能还有 工作起来没有任何问题。但它并没有形成一个图书馆链。< code>library1.cu和< code>library2.cu在同一个< code >中。so文件。 失败 如果我通过检查 ,则目标(T)内部。

  • 提供了大量的库例程。 有些内置在解释器, ex.exe, exw.exe or exu 。 其他的是用Euphoria编写的,你必须在euphoria\include目录中包含一个.e文件才能使用它们。 要指出可以传入和返回的对象类型,使用以下前缀 - S.No 前缀和描述 1 x 一般对象(原子或序列) 2 s 一个序列 3 a 一个原子 4 i 整数 5 fn 用作文件编号的整数 6 st 字

  • 库正由[15.0.0,15.0.0]、[16.0.0,16.0.0]]上的各种其他库请求,但解析为16.0.0。禁用插件并使用检查依赖关系树/gradlew:app:dependencies。

  • 我正在使用npm的一个简单的第三方库,卡方检验(https://www.npmjs.com/package/chi-squared-test). 它以commonjs风格导出一个(匿名)函数: 该函数返回一个具有两个属性的对象,我最感兴趣的属性是“概率”。我使用“npm I——保存卡方检验”安装了它我在angular 4的一个组件中工作。我能够将导出函数与我的组件中的这个导入语句一起使用。ts文件