阐明CMAKE库的安装

问题描述

奇怪的是,我可以理解CMAKE文档,但是我仍然不知道如何在更复杂的情况下使用它。

我想安装共享库,让其他人使用它。 我知道我可以使用CMAKE install命令来安装它,但是我的第一个问题是我的代码仍可以在不安装库的情况下运行。该库已构建并放在cmake_build_debug目录下。

我所做的只是:

FILE(GLOB SHAREAD_SRC
        ${CMAKE_CURRENT_SOURCE_DIR}/Interface/*.cpp
        )
set(MY_LIB mylib)
add_library(${MY_LIB} SHARED ${SHAREAD_SRC})
add_executable(run_src src/my_src.cpp ${HEADERS})
target_link_libraries(run_src ${MY_LIB})

我现在可以在我的源代码中包含库的标头并开始使用它。

我的问题是

  1. 在添加库命令中,我还应该包括库的头文件吗?目前,我只包含用于构建库的源文件,因为每当我使用该库时,我就知道库头的物理位置(因为我创建了该库),对于那些也想使用此库的人,我会提供它们是标头和内置的lib目标,因此无论它们放在哪里,都没问题。

  2. 一些回答谈论安装命令,说没有add_library Why add header files into ADD_LIBRARY/ADD_EXECUTABLE command in CMake中包含的头文件,否则在IDE生成的项目中看不到头。我的标题在该项目中,所以我不理解这个问题。为什么需要安装该库?如果用户下载了我的头文件并拥有内置的二进制文件,安装的目的是什么?

感谢您的帮助!预先感谢。

解决方法

  1. 除了提到的原因,指定的文件在IDE中将是“可见的”,还有一个:显式优于隐式(是的Pythonish语句)-意味着您可以给出提示向您的{em>您的库所包含的确切文件的 { $unwind: { path: "$parentComment",preserveNullAndEmptyArrays: true } } ]) 的读者开放。是的,出于很多的原因,使用CMakeLists.txt作为来源是已知的坏习惯-IRL,维护来源列表的确不是很困难,并使您的构建系统不易出错。在某些情况下,显式提及标头可以带来更多好处(例如,使用GLOB,但这是另一个主题:)

  2. 您没有指定工作流程(如何构建和分发项目/库)。但是,install(TARGET ... PUBLIC_HEADERS ...)的主要目标是形成项目的内置映像-即要安装的目标/文件/目录以及目录的布局。需要构建其他依赖于您的项目或生成软件包(带有CPack)以在某个地方分发或部署它们。

此外,要让其他人以CMake方式使用您构建的库,请阅读how to make a package section in the manual。因此,其他人可以只做install并使用它(通过find_package(YourProject)与它链接),很容易!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...