There is no real need to go through an intermediate variable. The following should work:
add_compile_options( "$<$<CXX_COMPILER_ID:GNU>:-Wall;-Wextra;-Werror>" ) Yves On Tue, Apr 24, 2018 at 6:58 PM, Elvis Stansvik < elvis.stans...@orexplore.com> wrote: > 2018-04-23 14:11 GMT+02:00 CHEVRIER, Marc <marc.chevr...@sap.com>: > > The space is used to separate arguments passed to COMMAND. So your > generator > > expression is splitted before evaluation and elements are no longer valid > > generator expression. > > > > > > > > So, to solve your problem, encapsulate the generator expression inside > > quotes. And apply the following advices for correct result: > > > > Separate command from args > > Use variable to list your arguments and add option COMMAND_EXPAND_LISTS > > (available with version 3.8) to avoid “spurious” semi-colons in the > result > > > > > > > > Your example reworked: > > > > > > > > Set (args foo bar) > > > > add_custom_target(foo) > > > > add_custom_command(TARGET foo POST_BUILD > > > > COMMAND $<1:echo> "$<1 :${args}>" > > > > COMMAND_EXPAND_LISTS > > > > ) > > > > Interesting thread. I was sort of in the same boat, having a > > add_compile_options( > "$<$<CXX_COMPILER_ID:GNU>:-Wall>" > "$<$<CXX_COMPILER_ID:GNU>:-Wextra>" > "$<$<CXX_COMPILER_ID:GNU>:-Werror>" > > "$<$<CXX_COMPILER_ID:Clang>:-Wall>" > "$<$<CXX_COMPILER_ID:Clang>:-Wextra>" > "$<$<CXX_COMPILER_ID:Clang>:-Werror>" > > "$<$<CXX_COMPILER_ID:AppleClang>:-Wall>" > "$<$<CXX_COMPILER_ID:AppleClang>:-Wextra>" > "$<$<CXX_COMPILER_ID:AppleClang>:-Werror>" > ) > > and of course wishing I could just write something like > > add_compile_options( > $<$<CXX_COMPILER_ID:GNU>:-Wall -Wextra -Werror> > $<$<CXX_COMPILER_ID:Clang>:-Wall -Wextra -Werror> > $<$<CXX_COMPILER_ID:AppleClang>:-Wall -Wextra -Werror> > ) > > instead. > > I can't depend on CMake 3.8+ just yet, but I'll remember your solution > for when I can. > > I don't quite like having to introduce variables though. Is there no > way to solve this without having to first stuff the elements in a list > and use that? > > Cheers, > Elvis > > > > > > > > > > > From: CMake <cmake-boun...@cmake.org> on behalf of Yves Frederix > > <yves.frederix+cm...@gmail.com> > > Date: Monday 23 April 2018 at 13:08 > > To: "cmake@cmake.org" <cmake@cmake.org> > > Subject: [CMake] Generator expressions containing spaces > > > > > > > > Hi, > > > > > > > > I recently learned that the COMMAND line in a custom command supports > > generator expressions. In particular, what makes this powerful is that if > > the expression evaluates to the empty string, no corresponding code will > be > > added to the target (as documented in the docs). > > > > > > > > While this works very nicely for single-string command, I fail to make it > > work for commands consisting of multiple space-separated strings: > > > > > > > > ``` > > > > ~/tmp/genex_with_spaces$ cat CMakeLists.txt > > cmake_minimum_required(VERSION 3.6) > > > > > > > > add_custom_target(foo) > > > > add_custom_command(TARGET foo POST_BUILD > > > > COMMAND $<1:echo bar> > > > > ) > > > > > > > > ~/tmp/genex_with_spaces$ grep bar build/CMakeFiles/foo.dir/build.make > > "\$$<1:echo" bar> > > > > ``` > > > > > > > > As can be seen, the generator expression is not expanded. > > > > > > > > My question is now whether I am doing something wrong (is there a correct > > way of dealing with spaces in the context of generator expressions?) or > > might this be an inherent limitation of generator expression in general? > > > > > > > > As a workaround, the only thing that seems to work is to put each of the > > space-separated components of the command in (typically identical) > genexes: > > > > > > > > ``` > > > > ~/tmp/genex_with_spaces$ cat CMakeLists.txt > > cmake_minimum_required(VERSION 3.6) > > > > > > > > add_custom_target(foo) > > > > add_custom_command(TARGET foo POST_BUILD > > > > COMMAND $<1:echo> $<1:bar> > > > > ) > > > > > > > > ~/tmp/genex_with_spaces$ grep bar build/CMakeFiles/foo.dir/build.make > > echo bar > > > > ``` > > > > > > Of course, while this works, things becomes very unreadable if the genex > is > > more complex. > > > > > > > > Other things that I have tried but failed: > > > > escape the space with a backslash -> this quotes the entire expression > > inside the genex. > > define the command directly as a list inside the genex -> this removes > > spaces between the different components of the command and quotes that > > result. > > treat the command as a list, perform string operations to wrap each > element > > in the desired regex and convert semicolon to spaces -> again results in > the > > command being quoted as a whole. > > > > > > > > Any advice is highly appreciated. > > > > > > > > Thanks, > > > > Yves > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Powered by www.kitware.com > > > > Please keep messages on-topic and check the CMake FAQ at: > > http://www.cmake.org/Wiki/CMake_FAQ > > > > Kitware offers various services to support the CMake community. For more > > information on each offering, please visit: > > > > CMake Support: http://cmake.org/cmake/help/support.html > > CMake Consulting: http://cmake.org/cmake/help/consulting.html > > CMake Training Courses: http://cmake.org/cmake/help/training.html > > > > Visit other Kitware open-source projects at > > http://www.kitware.com/opensource/opensource.html > > > > Follow this link to subscribe/unsubscribe: > > https://cmake.org/mailman/listinfo/cmake > > >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake