As from the documentation of configure_file, it has an useful @ONLY parameter used to:
Restrict variable replacement to references of the form
@VAR@. This is useful for configuring scripts that use${VAR}syntax.
So far so good.
Now I'm in the case where I've a file that contains both @FOO@ and ${BAR} and I want to replace S{BAR} with a variable that comes from my CMakeLists.tx. On the other side I don't want that configure_file tries to replace @FOO@.
In other terms, I need something like a $ONLY parameter that works as @ONLY but for the opposite case.
Is there any chance I can do that with what I have right now?
I tried putting backslashes in front of my @, but this way I obtain a file that contains a couple of \@ and this is not exactly what I need.
At least I found a solution that works, even if I'm not sure that's the best approach ever.
I leave it as an answer for future readers in case no solutions come up.
Suppose the line to be elaborated looks like this:
@DontTouchMe@/${PROJECT_NAME}
To be able to skip the @DontTouchMe@ part when you pass the file to configure_file, you can change the line as it follows:
@@Workaround@DontTouchMe@Workaround@@/${PROJECT_NAME}
configure_file will match and replace @Workaround@ parts with an empty string and forget about the other @ around, so that you obtain the following line after the substitution:
@DontTouchMe@/TheNameOfTheProject
Quite dirty and it could break out with future releases of cmake for it actually exploits a bug (uhm, I'm not sure I can call it this way actually) of the tool.
Anyway, it works and can be a viable approach for those out there that are still looking for a possible solution.
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