This repository was archived by the owner on Jan 26, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 114
This repository was archived by the owner on Jan 26, 2024. It is now read-only.
[CMake BUG] If I don't install, the built target opentracing won't carry correct INTERFACE include directories #132
Copy link
Copy link
Open
Description
CLion won't build install target of CMake. And if I build from source by CLion, the built targets won't carry correct INTERFACE include directories. So when linking with opentracing, the compiler will complain about not find the .h files.
something like this:
In file included from /somepath/TextMapCarrier.cpp:12:0:
/somepath/TextMapCarrier.h:14:10: fatal error: opentracing/propagation.h: No such file or directory
#include <opentracing/propagation.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
otherpath/CMakeFiles/tracing.dir/build.make:62: recipe for target 'otherpath/CMakeFiles/tracing.dir/TextMapCarrier.cpp.o' failed
make[3]: *** [otherpath/CMakeFiles/tracing.dir/TextMapCarrier.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
In file included from /somepath/TraceContext.cpp:12:0:
/somepath/TraceContext.h:14:10: fatal error: opentracing/tracer.h: No such file or directory
#include <opentracing/tracer.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
otherpath/tracing.dir/build.make:75: recipe for target 'src/tracing/CMakeFiles/tracing.dir/TraceContext.cpp.o' failed
make[3]: *** [otherpath/tracing.dir/TraceContext.cpp.o] Error 1
/sompath/TracerUtil.cpp:14:10: fatal error: opentracing/dynamic_load.h: No such file or directory
#include <opentracing/dynamic_load.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~REASON
The reason is your CMakeLists.txt didn't give opentracing target a correct interface include directories. List below.
if (BUILD_SHARED_LIBS)
add_library(opentracing SHARED ${SRCS})
target_link_libraries(opentracing ${LIBRARIES})
target_include_directories(opentracing INTERFACE "$<INSTALL_INTERFACE:include/>")
...
endif()
if (BUILD_STATIC_LIBS)
add_library(opentracing-static STATIC ${SRCS})
...
target_include_directories(opentracing-static INTERFACE "$<INSTALL_INTERFACE:include/>")
...
endif()You only give an INSTALL_INTERFACE include directories for the target
So if I don't install (If I use CLion or trying to integrate opentracing with my own cmake project), When I link with opentracing, the above build errors will occur.
Suggestions
add other include directories to opentracing's INTERFACE include directories, something like this:
if (BUILD_SHARED_LIBS)
add_library(opentracing SHARED ${SRCS})
target_link_libraries(opentracing ${LIBRARIES})
target_include_directories( opentracing INTERFACE
"$<INSTALL_INTERFACE:include/>"
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/3rd_party/include> )
...
endif()Metadata
Metadata
Assignees
Labels
No labels