[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