[CMake] COMPILE_FLAGS property that appends instead of replaces

2012-02-06 Thread Robert Dailey
I would like to set the COMPILE_FLAGS property multiple times on the same
target through set_target_properties(), however only the last call seems to
persist. Previous flags set get overridden. Is this the correct behavior?
If so, is there a way to make this property append instead of replace on
the same target?

-
Robert Dailey
--

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

Re: [CMake] COMPILE_FLAGS property that appends instead of replaces

2012-02-06 Thread aaron . meadows
I believe that is the defined behavior.  Usually, people would use
add_definitions() to add the flags before creating the target.  If you
have one target per subdirectory, you don't have to worry about removing
them afterwards:

 

CMakeLists.txt:

   add_definitions(/foo)

 

   add_subdirectory(baz)

   add_subdirectory(qux)

 

baz/CMakeLists.txt

   add_definitions(/bar)

   add_executable(baz baz.cpp)

 

qux/CMakeLists.txt

   add_executable(qux qux.cpp)

 

 

baz gets the compiler flags /foo /bar, qux only gets /foo.

 

 

 

As an aside, I ran into a similar issue, but with Linker Flags in the
cache.  To overcome that, I wrote a few functions to encapsulate the
writing of flags and handle checking for duplicates.  You could
certainly do something similar with properties:

 



## Cache Set Helper Functions



function(AppendIfMissing _outVar _inVar _value)

  string(REGEX REPLACE   ; _inList ${${_inVar}})

  list(FIND _inList ${_value} _pos)

 

  if(${_pos} EQUAL -1)

set(${_outVar} ${${_inVar}} ${_value} PARENT_SCOPE)

  else()

set(${_outVar} ${${_inVar}} PARENT_SCOPE)

  endif()

endfunction(AppendIfMissing)

 

function(CheckAndAppendCacheForce _varName _value _type )

  AppendIfMissing(_outvar ${_varName} ${_value})

 

  foreach(_arg IN LISTS ARGN)

set(_desc ${_desc} ${_arg})

  endforeach()

 

  set(${_varName} ${_outvar} CACHE ${_type} ${_desc} FORCE)

endfunction(CheckAndAppendCacheForce)

 

function(CheckAndAppendCache _varName _value _type )

  AppendIfMissing(_outvar ${_varName} ${_value})

 

  foreach(_arg IN LISTS ARGN)

set(_desc ${_desc} ${_arg})

  endforeach()

 

  set(${_varName} ${_outvar} CACHE ${_type} ${_desc})

endfunction(CheckAndAppendCache)

 

 

Aaron Meadows

 

From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On Behalf
Of Robert Dailey
Sent: Monday, February 06, 2012 3:58 PM
To: CMake ML
Subject: [CMake] COMPILE_FLAGS property that appends instead of replaces

 

I would like to set the COMPILE_FLAGS property multiple times on the
same target through set_target_properties(), however only the last call
seems to persist. Previous flags set get overridden. Is this the correct
behavior? If so, is there a way to make this property append instead of
replace on the same target?


 

-

Robert Dailey


This email was sent to you by Thomson Reuters, the global news and information 
company. Any views expressed in this message are those of the individual 
sender, except where the sender specifically states them to be the views of 
Thomson Reuters.--

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

Re: [CMake] COMPILE_FLAGS property that appends instead of replaces

2012-02-06 Thread Robert Dailey
Thanks.

This seems to work:


set_property( TARGET foo APPEND_STRING PROPERTY
COMPILE_FLAGS /ZI 
)

set_property( TARGET foo APPEND_STRING PROPERTY
COMPILE_FLAGS /W4 
)

Just make sure you have a space at the end of each one, so that when the
strings are appended, there is a space between each compiler flag.

-
Robert Dailey


On Mon, Feb 6, 2012 at 4:13 PM, aaron.mead...@thomsonreuters.com wrote:

 *I believe that is the defined behavior.  Usually, people would use
 add_definitions() to add the flags before creating the target.  If you have
 one target per subdirectory, you don’t have to worry about removing them
 afterwards:*

 * *

 *CMakeLists.txt:*

 *   add_definitions(/foo)*

 * *

 *   add_subdirectory(baz)*

 *   add_subdirectory(qux)*

 * *

 *baz/CMakeLists.txt*

 *   add_definitions(/bar)*

 *   add_executable(baz baz.cpp)*

 * *

 *qux/CMakeLists.txt*

 *   add_executable(qux qux.cpp)*

 * *

 * *

 *baz gets the compiler flags “/foo /bar”, qux only gets “/foo”.*

 * *

 * *

 * *

 *As an aside, I ran into a similar issue, but with Linker Flags in the
 cache.  To overcome that, I wrote a few functions to encapsulate the
 writing of flags and handle checking for duplicates.  You could certainly
 do something similar with properties:*

 * *

 **

 *## Cache Set Helper Functions*

 **

 *function(AppendIfMissing _outVar _inVar _value)*

 *  string(REGEX REPLACE   ; _inList ${${_inVar}})*

 *  list(FIND _inList ${_value} _pos)*

 * *

 *  if(${_pos} EQUAL -1)*

 *set(${_outVar} ${${_inVar}} ${_value} PARENT_SCOPE)*

 *  else()*

 *set(${_outVar} ${${_inVar}} PARENT_SCOPE)*

 *  endif()*

 *endfunction(AppendIfMissing)*

 * *

 *function(CheckAndAppendCacheForce _varName _value _type )*

 *  AppendIfMissing(_outvar ${_varName} ${_value})*

 * *

 *  foreach(_arg IN LISTS ARGN)*

 *set(_desc ${_desc} ${_arg})*

 *  endforeach()*

 * *

 *  set(${_varName} ${_outvar} CACHE ${_type} ${_desc} FORCE)*

 *endfunction(CheckAndAppendCacheForce)*

 * *

 *function(CheckAndAppendCache _varName _value _type )*

 *  AppendIfMissing(_outvar ${_varName} ${_value})*

 * *

 *  foreach(_arg IN LISTS ARGN)*

 *set(_desc ${_desc} ${_arg})*

 *  endforeach()*

 * *

 *  set(${_varName} ${_outvar} CACHE ${_type} ${_desc})*

 *endfunction(CheckAndAppendCache)*

 * *

 * *

 *Aaron Meadows*

 * *

 *From:* cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] *On
 Behalf Of *Robert Dailey
 *Sent:* Monday, February 06, 2012 3:58 PM
 *To:* CMake ML
 *Subject:* [CMake] COMPILE_FLAGS property that appends instead of replaces
 

 ** **

 I would like to set the COMPILE_FLAGS property multiple times on the same
 target through set_target_properties(), however only the last call seems to
 persist. Previous flags set get overridden. Is this the correct behavior?
 If so, is there a way to make this property append instead of replace on
 the same target?
 

 ** **

 -

 Robert Dailey

 This email was sent to you by Thomson Reuters, the global news and
 information company. Any views expressed in this message are those of the
 individual sender, except where the sender specifically states them to be
 the views of Thomson Reuters.
--

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