cmake和GenerateExportHeader

Mic*_*iak 9 c++ build cmake

我正在尝试使用cmake的GenerateExportHeader模块.

我的CmakeLists.txt的一部分:

add_compiler_export_flags()
add_library(gui SHARED ${gui_CPP} ${gui_HPP})
generate_export_header(gui)
Run Code Online (Sandbox Code Playgroud)

它对gui项目本身很有用,但是当我尝试在另一个项目中包含gui的.h文件时,找不到#include"gui_export.h".这很明显,因为gui_export.h是在gui的build dir中创建的,它不在其他项目的include路径中.

简单的解决方案是将gui的构建目录添加到其他项目的包含但是:1.我不认为它是犹太解决方案2.我实际上甚至无法找到如何找出目标的构建目录

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

Mic*_*iak 6

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

generate_export_header(gui EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/gui_export.h)
Run Code Online (Sandbox Code Playgroud)

在所有项目中,我将$ {CMAKE_BINARY_DIR}/exports /添加到包含


Mat*_*hew 6

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

target_include_directories(gui PUBLIC ${CMAKE_BINARY_DIR}/exports)
Run Code Online (Sandbox Code Playgroud)

然后当你导出()你的库(你应该这样做!)或者在目标接口属性已知的上下文中使用它时(例如在同一个整体CMake项目中,这似乎就是你正在做的事情),target_link_libraries( foo gui)也会拿起必要的include目录.

将它放在一个众所周知的目录中有点正交.在任何一种情况下,建议使用target_include_directories告诉消费者在哪里找到您的库的标题.