Reputation: 5339
In our project we are setting CMAKE_SYSROOT
depending on the selected configuration. It is so because configuration expresses (amongst others) target platform (cross-compilation - but not only, also slight behavior differences).
We would like to express this with generator expression to be friendly towards multi-configuration IDEs.
However, we haven't found a way to do so. First, you will notice that CMAKE_SYSROOT
doesn't even mention such a possibility. We still tried to set it to something like this (not exact value - just a sample!):
set(CMAKE_SYSROOT $<IF:$<CONFIG:hw1>,path1,path2>)
hoping that the value is used in a context where generator expressions are supported. But apparently, it is not. Instead, it seems that the verbatim value is provided in --sysroot
argument (--sysroot="\$<IF:\$<CONFIG:hw1>,path1,path2>"
). Adding quotes around the value doesn't change anything.
What other options do we have?
Let me also add a note on the CMAKE_TOOLCHAIN_FILE
which is mentioned in the documentation of CMAKE_SYSROOT
.
I don't see the CMAKE_TOOLCHAIN_FILE
being set to anything after grep
-ing through files generated by cmake -DCMAKE_BUILD_TYPE=hw1 ../
and our own sources.
Apparently, the file where we set the CMAKE_SYSROOT
is not pointed to by CMAKE_TOOLCHAIN_FILE
. Yet, still, the --sysroot
argument is being set to the expected value. (Only not by generator expression!) So, it does work somehow.
I expect we will have the same issue with other variables as well:
the last two depend on the CMAKE_SYSROOT
anyway (in our case).
Upvotes: 0
Views: 457
Reputation: 3554
If you really want to pass different --sysroot
flags to the linker on a multi-configuration generator you'll just have to pass it via target_link_options
using a generator expression. But then you might have to update rpath
items yourself, but I'm not sure about that.
Variables are not used at build time and the documentation for generator expressions state:
Generator expressions are allowed in the context of many target properties...
I didn't see anything in the set
command that prevents CMAKE_SYSROOT
being set outside a tool-chain file. I'm guessing that the phrase This variable may only be set in a toolchain file
should be This variable is normally used in a toolchain file
.
It almost seems like that you are trying to use build type as a switch between two different tool chains. If that is the case then I don't see how that could work correctly with a multi-configuration generator. Most of everything you want to set is determined and used at configuration time not build time.
Upvotes: 3