[CMake] Controlling order of includes with INTERFACE_INCLUDE_DIRECTORIES for an IMPORTED target

Craig Scott craig.scott at crascit.com
Fri Oct 12 04:02:26 EDT 2018


On Fri, Oct 12, 2018 at 6:42 PM David Jobet <djobet at tower-research.com>
wrote:

> Hello,
>
> we embed in our source a copy of an ICC build of LLVM, that we import :
>
> add_library(global_llvm_external STATIC IMPORTED)
> set_property(TARGET global_llvm_external APPEND PROPERTY
> INTERFACE_INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/icc/include)
> set_property(TARGET global_llvm_external APPEND PROPERTY
> IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/icc/lib/libLLVMCore.a)
> set_property(TARGET global_llvm_external APPEND PROPERTY
> INTERFACE_LINK_LIBRARIES
> ${CMAKE_CURRENT_SOURCE_DIR}/icc/lib/libLLVMLTO.a ...)
>
> add_library(global_llvm INTERFACE)
> target_link_libraries(global_llvm INTERFACE global_llvm_external)
> add_library(global::llvm ALIAS global_llvm)
>
> It works fine, until someone decided to install a more recent version
> of LLVM in its development env. (which is not ABI compatible)
>
> Somehow, system includes path are looked into first
> g++ ... -I/apps/homefs1/USER/work/. -I. -isystem
> /spare/local/USER/conda_root/envs/gcc6cxx14/include -isystem
> /apps/homefs1/USER/work/.../libllvm/icc/include ...
>
> so, as with include_directories where it's possible to control the
> ordering with BEFORE or AFTER, is there a way to tell cmake that when
> linking against global::llvm we want the include directories needed by
> global::llvm to be prepended (instead of appended) ?
>
>
While not directly answering your question, what version of CMake are you
using? There was a change related to this area in the following merge
request that went in for the 3.12 release:

https://gitlab.kitware.com/cmake/cmake/merge_requests/1968

The part that got my attention is the following claim in the description:

An effect of the -isystem flag is to search the directory after
> those specified via -I flags.


Which seems at odds with your observations/comments, unless I'm
misunderstanding what you're saying.

-- 
Craig Scott
Melbourne, Australia
https://crascit.com

New book released: Professional CMake: A Practical Guide
<https://crascit.com/professional-cmake/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20181012/4504aa61/attachment.html>


More information about the CMake mailing list