我正在尝试使用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.我实际上甚至无法找到如何找出目标的构建目录
我怎样才能很好地解决这个问题?
我已经使用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 /添加到包含
使用现代(即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告诉消费者在哪里找到您的库的标题.
| 归档时间: |
|
| 查看次数: |
8102 次 |
| 最近记录: |