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

David Hauck davidh at netacquire.com
Mon May 25 16:04:35 EDT 2015


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



More information about the CMake mailing list