[CMake] Stray backslash appearing when CMAKE_CXX_FLAGS_RELEASE used in custom command
On 1 November at 10:02, Stephen Morris wrote: > My approach is basically to set up a custom command thus: > set(CXX_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}) .. or whatever, > depending on the current configuration.. > get_target_property(compile_options, mytarget, COMPILE_OPTIONS) > add_custom_command(OUTPUT myheader.h.gch > COMMAND ${CMAKE_CXX_COMPILER} > ${CXX_FLAGS} ${compile_options} -fPIC -std=gnu++17 -c myheader.h -o > myheader.h.gch > DEPENDS myheader.h) > add_custom_target(BuildMyPCH > DEPENDS myheader.h.gch) > add_dependencies(mytarget, BuildMyPCH) My earlier question still stands, but at the time I wrote it I had only tested it for Debug builds where ${CMAKE_CXX_FLAGS_DEBUG} consisted of a single item, '-g'. I've since tried doing the same thing for a Release build, and this failed because ${CMAKE_CXX_FLAGS_RELEASE} has two items, '-O3 -DNDEBUG'. When the custom command is executed, this somehow becomes "-O3\ -DNDEBUG" on the command line, and the presence of the stray backslash causes the compilation to fail with the message, "cc1plus: error: argument to '-O' should be a non-negative integer. 'g', 's' or 'fast'" So why isn't the cmake variable placed properly onto the command line, and what can I do to prevent this behaviour? -- 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
[CMake] Accessing -fPIC and -std settings within CMake definitions
I'm setting up a custom build step to build a precompiled header in gcc (yes I know that native support is coming with CMake 3.16, but I need to get something working on an older version). My approach is basically to set up a custom command thus: set_target_properties(mytarget PRIVATE CXX_STANDARD 17) set_target_properties(mytarget PRIVATE POSITION_INDEPENDENT CODE_1) set(CMAKE_VERBOSE_MAKEFILE TRUE) ... ... set(CXX_FLAGS ${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG}) .. or whatever, depending on the current configuration.. get_target_property(compile_options, mytarget, COMPILE_OPTIONS) add_custom_command(OUTPUT myheader.h.gch COMMAND ${CMAKE_CXX_COMPILER} ${CXX_FLAGS} ${compile_options} -fPIC -std=gnu++17 -c myheader.h -o myheader.h.gch DEPENDS myheader.h) add_custom_target(BuildMyPCH DEPENDS myheader.h.gch) add_dependencies(mytarget, BuildMyPCH) You'll note that in my custom command I've had to specify -fPIC and -std-gnu++17 explicitly, because they aren't included among either CXX_FLAGS or COMPILE_OPTIONS. I've looked for them among the COMPILE_DEFINITIONS, COMPILE_FEATURES and COMPILE_FLAGS properties of my target as well, but there's no sign of them. And yet if I look at the verbose output when gcc builds other files using the CMake-generated makefile, I see that they are being included automatically. So, my question: where is CMake storing these settings, and how can I apply them in my custom command without having to do so manually? -- 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