CMakeLists.txt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. cmake_minimum_required(VERSION 2.8)
  2. project(CompileOptions)
  3. add_library(testlib other.cpp)
  4. if(TEST_FORTRAN)
  5. enable_language(Fortran)
  6. endif()
  7. add_executable(CompileOptions main.cpp)
  8. macro(get_compiler_test_genex lst lang)
  9. list(APPEND ${lst} -DTEST_${lang}_COMPILER_VERSION="$<${lang}_COMPILER_VERSION>")
  10. list(APPEND ${lst} -DTEST_${lang}_COMPILER_VERSION_EQUALITY=$<${lang}_COMPILER_VERSION:${CMAKE_${lang}_COMPILER_VERSION}>)
  11. endmacro()
  12. get_compiler_test_genex(c_tests C)
  13. get_compiler_test_genex(cxx_tests CXX)
  14. if(TEST_FORTRAN)
  15. get_compiler_test_genex(fortran_tests Fortran)
  16. endif()
  17. set_property(TARGET CompileOptions PROPERTY COMPILE_OPTIONS
  18. "-DTEST_DEFINE"
  19. "-DNEEDS_ESCAPE=\"E$CAPE\""
  20. "$<$<CXX_COMPILER_ID:GNU>:-DTEST_DEFINE_GNU>"
  21. "SHELL:" # produces no options
  22. ${c_tests}
  23. ${cxx_tests}
  24. ${fortran_tests}
  25. )
  26. if(BORLAND OR WATCOM)
  27. # these compilers do not support separate -D flags
  28. target_compile_definitions(CompileOptions PRIVATE NO_DEF_TESTS)
  29. else()
  30. set_property(TARGET CompileOptions APPEND PROPERTY COMPILE_OPTIONS
  31. "SHELL:-D DEF_A"
  32. "$<1:SHELL:-D DEF_B>"
  33. "SHELL:-D 'DEF_C' -D \"DEF_D\""
  34. [[SHELL:-D "DEF_STR=\"string with spaces\""]]
  35. )
  36. endif()
  37. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|Borland|Embarcadero")
  38. set_property(TARGET CompileOptions APPEND PROPERTY COMPILE_OPTIONS
  39. "-DTEST_OCTOTHORPE=\"#\""
  40. )
  41. endif()
  42. target_link_libraries(CompileOptions testlib)
  43. if(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
  44. target_compile_definitions(CompileOptions
  45. PRIVATE
  46. "DO_GNU_TESTS"
  47. )
  48. endif()
  49. target_compile_definitions(CompileOptions
  50. PRIVATE
  51. "EXPECTED_C_COMPILER_VERSION=\"${CMAKE_C_COMPILER_VERSION}\""
  52. "EXPECTED_CXX_COMPILER_VERSION=\"${CMAKE_CXX_COMPILER_VERSION}\""
  53. )
  54. if(TEST_FORTRAN)
  55. # Definitions for the C++ code to test the values
  56. target_compile_definitions(CompileOptions
  57. PRIVATE
  58. "TEST_FORTRAN"
  59. "EXPECTED_Fortran_COMPILER_VERSION=\"${CMAKE_Fortran_COMPILER_VERSION}\""
  60. )
  61. endif()