[CMake] Per Target CMAKE_C??_FLAGS Reset/Redefinition

David Hauck davidh at netacquire.com
Tue May 26 14:43:04 EDT 2015


Hi Murali,
 
On Tuesday, May 26, 2015 11:07 AM, muralisrsai at gmail.com wrote:
> Hi David,
> 
> The project that I am working on has similar needs of having different
> flags for each target. I have placed the different targets in
> different sub-folders and set the CMAKE_*_FLAGS. This approach seems
> to work fine as you mentioned.
> 
> From my understanding, a new add_subdirectory creates a new scope of
> variables.
> 
> I feel that having different targets in different directories is a
> good logical separation. So if that's working for you, why not use it?

I'm fine using this alternate method. However: 1) it wasn't my first choice, and 2) there didn't seem to be anything obvious that documented why/whether this wouldn't be supported. As such, wrt #2, I spent a chunk of time trying to figure out why it wasn't working. Perhaps others have fought this as well? If so, my suggestion would be to either: a) support it (assuming this isn't obviously not possible), or b) document that it's not supported (apologies if this already exists somewhere and I've missed it!).

Thanks,
-David

> I am not sure if there is a better way, but I hope someone will comment.
> 
> Regards,
> Murali.
> 
> On Mon, May 25, 2015 at 1:04 PM, David Hauck <davidh at netacquire.com>
> wrote:
> 
> 
> 	Hi,
> 
> 	I've been searching for a definitive discussion of this but haven't
> been successful finding it. I have a (Unix Makefile) CMakeLists.txt
> project sub-directory that defines several (3) targets (for executable
> and shared targets). I'm trying to reset/redefine the CMAKE_C??_FLAGS
> (specifically CMAKE_C_FLAGS) property on one of the targets via the
> following statement in the CMakeLists.txt file:
> 
> 	set_property(TARGET <target_name> PROPERTY CMAKE_C_FLAGS "-Wall
> -shared") 	set_property(TARGET <target_name> PROPERTY
> CMAKE_C_FLAGS_DEBUG "-g") 	set_property(TARGET <target_name> PROPERTY
> CMAKE_C_FLAGS_RELEASE "-O3")
> 
> 	However, this isn't working and the resulting target compilation is
> using the directory's value for these properties. Other redefinitions
> of per- target properties (e.g., INCLUDE_DIRECTORIES) do seem to take
> so I'm wondering if certain properties are per-directory only and
> aren't meaningful with the "set_property(TARGET ...)" construct?
> 
> 	If I move the target to its own sub-directory and use the following
> CMakeLists.txt commands instead the compile flags are properly (re)set:
> 
> 	SET (CMAKE_C_FLAGS "-Wall -shared")
> 	SET (CMAKE_C_FLAGS_DEBUG "-g")
> 	SET (CMAKE_C_FLAGS_RELEASE "-O3")
> 
> 	Oddly the aforementioned "set_property(TARGET..." constructs in place
> of the above "SET(CMAKE..." constructs also fail to reset the flags in
> this new directory so this doesn't seem related to the sub-directory
> CMakeLists.txt file when multiple targets are defined.
> 
> 	I must have missed something obvious related to this in the
> documentation and/or the mailing list/Google. Any ideas?
> 
> 	Thanks,
> 	-David
> 
> 	--
> 
> 	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:
> 	http://public.kitware.com/mailman/listinfo/cmake
> 
>


More information about the CMake mailing list