[CMake] Replacing compiler flags for certain project subdirectories

Whitcomb, Mr. Tim Tim.Whitcomb at nrlmry.navy.mil
Wed Mar 30 14:00:03 EDT 2011


Shortening to reduce wall-of-text:

I have a Fortran project with a top-level CMakeLists.txt file with 47 add_subdirectory calls.  Three of the subdirectories require a different set of preprocessor definitions and compiler flags than the other 47.  I can add the preprocessor definitions, but am having trouble with the compiler flags.  I need to have a completely different set in those subdirectories, so COMPILE_FLAGS target property won't work as it augments what's already there.

How can I replace (not extend) the compiler flags for these few subdirectories?

Tim

> -----Original Message-----
> From: cmake-bounces at cmake.org 
> [mailto:cmake-bounces at cmake.org] On Behalf Of Whitcomb, Mr. Tim
> Sent: Friday, March 25, 2011 3:18 PM
> To: 'cmake at cmake.org'
> Subject: [CMake] Replacing compiler flags for certain project 
> subdirectories
> 
> I'm in the process of adding Cmake-build capability to a 
> Fortran project that currently follows a traditional 
> recursive-make build structure.  I've converted all the 
> makefiles to CMakeLists.txt files and can now produce all the 
> target libraries and executables with their dependencies 
> correctly recognized.  These dependencies have made a huge 
> difference in allowing us to perform parallel builds and have 
> the project ready to go *much* faster than before.  I have a 
> top-level CMakeLists.txt file that contains a few library 
> searches (e.g. LAPACK, BLAS) and then an add_subdirectory 
> call for each subdirectory in the project.  Each subdirectory 
> corresponds to a library and/or an executable.
> 
> Now that the listing files contain all the sources files they 
> need, my current task is to go through and set the proper 
> compiler/preprocessor flags to match the original makefiles.  
> We have several directories in our source tree that are 
> auxiliary libraries that we store in our Subversion 
> repository and build as part of our regular build process.  
> The libraries that are built in these directories are 
> compiled with different compiler flags and different 
> preprocessor definitions than the rest of the project.  I've 
> been able to handle the preprocessor definitions by using 
> add_definitions in the CMakeLists.txt files in the 
> lower-level directories.  I see based on reading through some 
> past threads (including the recent "Different CMAKE_CXX_FLAGS 
> for different executables") on this list and on some 
> StackOverflow questions that the COMPILE_FLAGS target 
> property is very close to what I need (and actually *was* 
> what I needed in several cases) but only appends flags to 
> those currently  in use.  What I need is to be able to define 
> a new set of compile flags (i.e. "forget everything you were 
> using before and use THIS set in this directory").
> 
> I've started going through the documentation for Building 
> External Projects[*] but the first line states that "[a]n 
> "external project" is one that you can get the source code 
> for, but does not readily build with a simple 
> ADD_SUBDIRECTORY call in your CMakeLists.txt file."  This 
> feels like it's designed to solve a slightly different 
> problem than what I'm trying to do - I have an 
> add_subdirectory call in my CMakeLists.txt file - is the 
> proper fix for this issue to make the pieces that require 
> different flags external projects?  Will making some of these 
> libraries external projects mess with the dependency calculation?
> 
> I'm just getting started and trying to wrap my head around 
> the options available.  What is the standard way of dealing 
> with this issue?  Is there anything I'm missing?  Thank you 
> for your assistance!
> 
> Tim
> [w] 
> 
> [*] 
> http://www.kitware.com/products/html/BuildingExternalProjectsW
> ithCMake2.8.html


More information about the CMake mailing list