[CMake] How to set platform-specific compiler-options from within CMakeFiles

Martin Apel martin.apel at simpack.de
Fri Jun 6 02:31:51 EDT 2008


Thanks for your help. The problem is, that CMAKE_SYSTEM is not set at 
the time the INCLUDE statement is necessary. The PROJECT statement seems 
to cause it to be defined and at the same time sets the compiler flags. 
If I put the INCLUDE before PROJECT, then CMAKE_SYSTEM is not available, 
only defines like WIN32. If I put the INCLUDE after PROJECT the compiler 
flags are already defined, so I cannot add any initial flags anymore. To 
me it looks like a bug in CMake, that CMAKE_SYSTEM and CMAKE_SYSTEM_NAME 
are not defined until the PROJECT statement.
Simply appending flags to CMAKE_CXX_FLAGS after the PROJECT statement 
probably would work, but ccmake would not show these options, because 
the will never reach the cache. It seems I have to resort to this approach.

Best Regards,

Martin

Mike Jackson wrote:
> Sure you can:
>  INCLUDE (MSVC_Compiler_Stuff.cmake)
>
> #----------MSVC_Compiler_Stuff.cmake
> if (MSVC)
>
> endif (MSVC)
>
>
> I do this all the time for OS X specific stuff.
>
> For Linux you can try:
>
> IF(CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
>   # Linux Specific flags
>
> ENDIF(CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
>
> if you are using ICC on linux you can also test for that:
>
> IF( ${CMAKE_C_COMPILER} MATCHES "icc" )
>     SET(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -static-intel)
> ENDIF( ${CMAKE_C_COMPILER} MATCHES "icc" )
>
> or test for GCC:
>
> IF(CMAKE_COMPILER_IS_GNUCC)
>   SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmessage-length=0")
> ENDIF(CMAKE_COMPILER_IS_GNUCC)
> IF(CMAKE_COMPILER_IS_GNUCXX)
>   SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fmessage-length=0")
> ENDIF(CMAKE_COMPILER_IS_GNUCXX)
>
>
> Hope that helps a bit
>
> -- Mike Jackson   Senior Research Engineer
> Innovative Management & Technology Services
>
>
> On Jun 5, 2008, at 11:21 AM, Martin Apel wrote:
>
>> Unfortunately I cannot simply add one file with platform specifics 
>> for each additional platform. Instead I have to clutter up the main 
>> CMakeLists.txt with if statements.
>> Especially there is no way to support platforms for which no 
>> explicitly testable variable is available e.g. Linux.
>> Strange enough is, that WIN32 is set before the PROJECT statement, 
>> while CMAKE_SYSTEM_NAME is not.
>>
>> Martin
>>
>> Mike Jackson wrote:
>>> IF (WIN32)
>>> SET(......)
>>> ENDIF (WIN32)
>>>
>>> IF (MSVC)
>>>
>>> ENDIF (MSVC)
>>> -- Mike Jackson   Senior Research Engineer
>>> Innovative Management & Technology Services
>>>
>>>
>>> On Jun 5, 2008, at 10:35 AM, Martin Apel wrote:
>>>
>>>> Hi all,
>>>>
>>>> I am trying to set the CMAKE_CXX_FLAGS or CMAKE_CXX_FLAGS_INIT 
>>>> variable, such that it contains flags to turn off specific warnings 
>>>> for the Visual Studio compiler. I definitely want to set these 
>>>> additional flags from within a CMakeFile, specifying them on the 
>>>> command line or interactively is not an option.
>>>> I have included a Windows-specific file by using
>>>> INCLUDE (${CMAKE_SYSTEM_NAME}.cmake)
>>>>
>>>> The file Windows.cmake contains the line
>>>> SET (ENV{CXXFLAGS} "/wd4251")
>>>>
>>>> However this only works after the PROJECT line within the 
>>>> CMakeFile, because before it CMAKE_SYSTEM_NAME seems to be unset. 
>>>> On the other hand, when writing the include statement after the 
>>>> project command, the CMAKE_CXX_FLAGS seem already to be set. If 
>>>> possible I would like to specify those flags as initial values, 
>>>> avoiding to use the force option of the set command.
>>>>
>>>> What is the recommended way to add platform-specific compiler flags 
>>>> from within CMakeFiles?
>>>>
>>>> Any help would be appreciated.
>>>>
>>>> Martin
>>>>
>>>> _______________________________________________
>>>> CMake mailing list
>>>> CMake at cmake.org
>>>> http://www.cmake.org/mailman/listinfo/cmake
>>>
>>>
>>
>>
>> -- 
>>
>> Martin Apel                                     Tel:     0049 8153 
>> 9288-47
>> Software Architect                              E-Mail:  
>> martin.apel at simpack.de
>>
>> INTEC GmbH                                      Tel:     0049 8153 
>> 9288-0
>> Argelsrieder Feld 13                            Fax:     0049 8153 
>> 9288-11
>> 82234 Wessling                                  E-Mail:  
>> intec at simpack.de
>> Germany                                         URL:     
>> http://www.simpack.com
>>
>
>




More information about the CMake mailing list