[CMake] novice question: modification of FLAGS rule variable?

Glenn Coombs glenn.coombs at gmail.com
Thu Sep 8 06:15:29 EDT 2011


The set_target_properties() of COMPILE_FLAGS allows you to add the -DDEBUG
just for the mylibd target (although you should really use the
COMPILE_DEFINITIONS property for preprocessor symbols).  Why do you need to
mess with the <FLAGS> part of the compile command ?  Can't you add extra
compiler command flags like this:

    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -myFlag")

or even replace the default flags entirely like this:

    set(CMAKE_C_FLAGS "-foo")

I'm not sure what you are trying to achieve.  Can you explain in a bit more
detail ?

--
Glenn

On 8 September 2011 04:35, David Dunkle <ddunkle at arxan.com> wrote:

> Thanks, Glenn. That almost works. However, the values of <FLAGS> is hard to
> construct in this case. It looks something like this:****
>
> ** **
>
> add_library(mylib, STATIC, ${files})****
>
> set_target_properties(mylib****
>
>                                       PROPERTIES PREFIX “”****
>
>                                       COMPILE_FLAGS
> ${target_compiler_flags})****
>
> add_library(mylibd, STATIC, ${files})****
>
> set_target_properties(mylibd,****
>
>                                       PROPERTIES PREFIX “”****
>
>                                       COMPILE_FLAGS “-DDEBUG
> ${target_compiler_flags}”)****
>
> …****
>
> set(CMAKE_C_COMPILE_OBJECT "${target_compiler} -c <FLAGS> -o <OBJECT>")***
> *
>
> ** **
>
> I can replace <FLAGS> with ${target_compiler_flags} yielding this:****
>
> ** **
>
> set(CMAKE_C_COMPILE_OBJECT “${target_compiler} –c ${target_compiler_flags}
> –o <OBJECT>”)****
>
> ** **
>
> but then the –DDEBUG is missing for the build of mylibd. I guess both
> mylibd and mylib use CMAKE_C_COMPILE_OBJECT and I need a way to pass the
> –DDEBUG to the compile of one and not the other.****
>
> ** **
>
> -David****
>
> ** **
>
> *From:* Glenn Coombs [mailto:glenn.coombs at gmail.com]
> *Sent:* Wednesday, September 07, 2011 4:19 AM
> *To:* David Cole
> *Cc:* David Dunkle; cmake at cmake.org
> *Subject:* Re: [CMake] novice question: modification of FLAGS rule
> variable?****
>
> ** **
>
> What you can do however is set the variable which uses the <FLAGS>
> definition, i.e. CMAKE_C_COMPILE_OBJECT in your example.  I have a
> CMakeLists.txt file where I override the default assembler flags:
>
> set(CMAKE_ASM-ATT_COMPILE_OBJECT "<CMAKE_ASM-ATT_COMPILER> ${ASM_SYS_FLAGS}
> -o <OBJECT> <SOURCE>")
>
> to use what is set in my ASM_SYS_FLAGS variable instead of the default
> <FLAGS> one.  I'm not sure but I think you are supposed to set these sort of
> variables early on in a CMakeList.txt before the project() or
> enable_language() commands.  Also, I think that later changes to the
> ASM_SYS_FLAGS variable are ignored.
>
> --
> Glenn****
>
> On 5 September 2011 19:53, David Cole <david.cole at kitware.com> wrote:****
>
> On Mon, Sep 5, 2011 at 1:31 PM, David Dunkle <ddunkle at arxan.com> wrote:
> > Is it possible to read and to set a property/rule variable like <FLAGS>?
> > What syntax would I use to do that? I mean <FLAGS> as it, for example,
> > appears here:
> >
> >
> >
> > set(CMAKE_C_COMPILE_OBJECT "${target_compiler} -c <FLAGS> -o <OBJECT>")
> >
> >
> >
> > For example can I do something like this (this is pseudo code)?
> >
> >
> >
> > #read
> >
> > set(MY_FLAGS,  ${<FLAGS>} );
> >
> >
> >
> > …
> >
> >
> >
> > #set
> >
> > set(<FLAGS>, ${MY_FLAGS});
> >
> >
> >
> > In the documentation, here:
> >
> >
> >
> > http://cmake.org/Wiki/CMake_Useful_Variables#Expansion_Rules
> >
> >
> >
> > it hints at this being possible but doesn’t explain, at least not so that
> I
> > understand.
> >
> >
> >
> > Thanks,
> >
> > -David
> >
> >
> >
> >
> >****
>
> > _______________________________________________
> > Powered by www.kitware.com
> >
> > Visit other Kitware open-source projects at
> > http://www.kitware.com/opensource/opensource.html
> >
> > Please keep messages on-topic and check the CMake FAQ at:
> > http://www.cmake.org/Wiki/CMake_FAQ
> >
> > Follow this link to subscribe/unsubscribe:
> > http://www.cmake.org/mailman/listinfo/cmake
> >
>
> The wiki page is simply misleading. You cannot set those from the
> CMake language. CMake decides on their values in internal code, and
> then substitutes appropriately when generating make files or
> solution/project files for the build system.
>
> You can set things the "CMAKE_CXX_FLAGS" which eventually get
> translated into the substitution that CMake performs, but you cannot
> alter "<FLAGS>" in the rules variables.
>
>
> HTH,
> David
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.cmake.org/mailman/listinfo/cmake****
>
> ** **
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20110908/87bedbc9/attachment.htm>


More information about the CMake mailing list