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
[email protected]
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
[email protected]
http://www.cmake.org/mailman/listinfo/cmake