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

Mike Jackson imikejackson at gmail.com
Fri Jun 6 08:15:47 EDT 2008


typically, the PROJECT() statement is the first line of your  
CMakeLists.txt. Could you explain your project layout a bit more?


-- 
Mike Jackson   Senior Research Engineer
Innovative Management & Technology Services


On Jun 6, 2008, at 2:31 AM, Martin Apel wrote:

> 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