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@cmake.org
http://www.cmake.org/mailman/listinfo/cmake




--

Martin Apel Tel: 0049 8153 9288-47 Software Architect E-Mail: [EMAIL PROTECTED]

INTEC GmbH Tel: 0049 8153 9288-0 Argelsrieder Feld 13 Fax: 0049 8153 9288-11 82234 Wessling E-Mail: [EMAIL PROTECTED] Germany URL: http://www.simpack.com





_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to