cmake and GenerateExportHeader

cmake and GenerateExportHeader

本文关键字:GenerateExportHeader and cmake      更新时间:2023-10-16

我试图使用GenerateExportHeader模块从cmake。

我的CmakeLists.txt的一部分:

add_compiler_export_flags()
add_library(gui SHARED ${gui_CPP} ${gui_HPP})
generate_export_header(gui)

对于gui项目本身来说工作得很好,但是当我试图在另一个项目中包含gui的.h文件时,无法找到#include "gui_export.h"。这很明显,因为gui_export.h是在gui的构建目录中创建的,而不是在其他项目的包含路径中。

简单的解决方案是将gui的构建目录添加到其他项目的包含但是:1. 我觉得这不是一个好的解决方案2. 我甚至不知道如何找到目标目录

的构建目录

我怎样才能很好地解决这个问题?

我已经通过使用EXPORT_FILE_NAME解决了这个问题,所以现在我有:

generate_export_header(gui EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/gui_export.h)

和在所有项目我添加${CMAKE_BINARY_DIR}/exports/包括

使用现代(即2.8.11或更高版本)的CMake,首选机制是:

target_include_directories(gui PUBLIC ${CMAKE_BINARY_DIR}/exports)

然后,当你导出()你的库(你应该这样做!)或以其他方式使用它在一个上下文的目标接口属性是已知的(例如在相同的整体CMake项目,这似乎是你正在做的),target_link_libraries(foo gui)也将捡起必要的包括目录。

把它放在一个众所周知的目录是正交的。无论哪种情况,都建议使用target_include_directories来告诉用户在哪里可以找到库的头文件。

使用export()允许CMake找到你的构建树。您可以查看githugithugi上的openobex,了解如何配置。Cmake文件必须看起来像。

OTOH,你不应该在你的公共头文件中使用生成的导出头文件或安装它。

相关文章:
  • 没有找到相关文章