I'm trying to use GenerateExportHeader module from cmake.
part of my CmakeLists.txt:
add_compiler_export_flags()
add_library(gui SHARED ${gui_CPP} ${gui_HPP})
generate_export_header(gui)
it works nice for gui project itself, but when I try to include gui's .h files in another project, an #include "gui_export.h" cannot be find. This is obvious as gui_export.h was created in gui's build dir which is not in include path of other projects.
The simple solution would be to add gui's build dir to other project's includes but: 1. I don't find it as a kosher solution 2. I could not actually even find how to find out what is the build dir of a target
how can I solve this problem well?
With modern (i.e. 2.8.11 or later) CMake, the preferred mechanism is:
target_include_directories(gui PUBLIC ${CMAKE_BINARY_DIR}/exports)
Then when you export() your library (which you should do!) or otherwise use it in a context where the target interface properties are known (e.g. in the same overall CMake project, which seems to be what you are doing), target_link_libraries(foo gui) will also pick up the necessary include directory.
Putting it in a well known directory is somewhat orthogonal. In either case, it is recommended to use target_include_directories to tell consumers where to find your library's headers.
I've solved this problem by using EXPORT_FILE_NAME, so now I have:
generate_export_header(gui EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/exports/gui_export.h)
and in all projects I add ${CMAKE_BINARY_DIR}/exports/ to includes
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With