CMakeLists.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #
  2. # Create exe.
  3. #
  4. string(APPEND CMAKE_CXX_FLAGS " -DTEST_CXX_FLAGS")
  5. string(APPEND CMAKE_C_FLAGS " -DTEST_C_FLAGS")
  6. # Create an imported target for if(TARGET) test below.
  7. add_library(ExeImportedTarget UNKNOWN IMPORTED)
  8. # Test if(TARGET) command.
  9. if(NOT TARGET CMakeTestLibrary)
  10. message(FATAL_ERROR "if(NOT TARGET CMakeTestLibrary) returned true!")
  11. endif()
  12. if(NOT TARGET ExeImportedTarget)
  13. message(FATAL_ERROR "if(NOT TARGET ExeImportedTarget) returned true!")
  14. endif()
  15. if(TARGET LibImportedTarget)
  16. message(FATAL_ERROR "if(TARGET LibImportedTarget) returned true!")
  17. endif()
  18. if(TARGET NotATarget)
  19. message(FATAL_ERROR "if(TARGET NotATarget) returned true!")
  20. endif()
  21. # Use LINK_LIBRARIES instead of TARGET_LINK_LIBRARIES to
  22. set(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared)
  23. link_libraries(${COMPLEX_LIBS})
  24. # Test forcing a .cxx file to not build.
  25. set_source_files_properties(complex_nobuild.cxx PROPERTIES
  26. HEADER_FILE_ONLY 1)
  27. # Test forcing a .c file to not build.
  28. # This makes sure a mixed language library is created
  29. # with header file only sources
  30. set_source_files_properties(complex_nobuild.c PROPERTIES
  31. HEADER_FILE_ONLY 1)
  32. include_directories(${CMAKE_CURRENT_BINARY_DIR})
  33. add_executable(A A.cxx A.hh A.h A.txt)
  34. add_custom_command(OUTPUT Aout.h COMMAND A > Aout.h VERBATIM)
  35. add_executable(complex complex testcflags.c Aout.h)
  36. # Sub1/NameConflictTest.c Sub2/NameConflictTest.c)
  37. add_executable(complex.file complex.file.cxx complex_nobuild.cxx
  38. complex_nobuild.c)
  39. if (UNIX)
  40. target_link_libraries(complex ${CMAKE_DL_LIBS})
  41. elseif(NOT BORLAND AND NOT MINGW AND NOT CMAKE_C_COMPILER_ID STREQUAL "OrangeC")
  42. target_link_libraries(complex rpcrt4.lib)
  43. endif ()
  44. # Test linking to static lib when a shared lib has the same name.
  45. if(CMAKE_EXE_LINK_STATIC_CXX_FLAGS)
  46. add_definitions(-DCOMPLEX_TEST_LINK_STATIC)
  47. target_link_libraries(complex CMakeTestLinkStatic)
  48. endif()
  49. # can we get the path to a source file
  50. get_source_file_property(A_LOCATION A.cxx LOCATION)
  51. if ("${A_LOCATION}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/A.cxx")
  52. add_definitions(-DCMAKE_FOUND_ACXX)
  53. endif ()
  54. # get the directory parent
  55. get_directory_property(P_VALUE PARENT_DIRECTORY)
  56. if ("${P_VALUE}" STREQUAL "${CMAKE_SOURCE_DIR}")
  57. add_definitions(-DCMAKE_FOUND_PARENT)
  58. endif ()
  59. # get the stack of listfiles
  60. include(Included.cmake)
  61. if ("${LF_VALUE}" STREQUAL "${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt;${CMAKE_CURRENT_SOURCE_DIR}/Included.cmake")
  62. add_definitions(-DCMAKE_FOUND_LISTFILE_STACK)
  63. endif ()
  64. # Test add/remove definitions.
  65. add_definitions(
  66. -DCOMPLEX_DEFINED_PRE
  67. -DCOMPLEX_DEFINED
  68. -DCOMPLEX_DEFINED_POST
  69. -DCOMPLEX_DEFINED
  70. )
  71. remove_definitions(-DCOMPLEX_DEFINED)
  72. # Test pre-build/pre-link/post-build rules for an executable.
  73. add_custom_command(TARGET complex PRE_BUILD
  74. COMMAND ${CREATE_FILE_EXE}
  75. ARGS "Executable/prebuild.txt"
  76. WORKING_DIRECTORY "${Complex_BINARY_DIR}")
  77. add_custom_command(TARGET complex PRE_LINK
  78. COMMAND ${CREATE_FILE_EXE}
  79. ARGS "Executable/prelink.txt"
  80. WORKING_DIRECTORY "${Complex_BINARY_DIR}")
  81. add_custom_command(TARGET complex POST_BUILD
  82. COMMAND ${CREATE_FILE_EXE}
  83. ARGS "Executable/postbuild.txt"
  84. WORKING_DIRECTORY "${Complex_BINARY_DIR}")
  85. add_custom_command(TARGET complex POST_BUILD
  86. COMMAND ${CMAKE_COMMAND}
  87. ARGS -E copy
  88. "Executable/postbuild.txt"
  89. "Executable/postbuild2.txt"
  90. WORKING_DIRECTORY "${Complex_BINARY_DIR}")
  91. set_source_files_properties(complex
  92. COMPILE_FLAGS
  93. "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
  94. #" -DFILE_DEFINE_STRING=\\\"hello\\\""
  95. OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  96. )
  97. set_target_properties(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
  98. add_custom_command(
  99. MAIN_DEPENDENCY ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
  100. COMMAND ${CMAKE_COMMAND}
  101. ARGS -E copy ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
  102. ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  103. OUTPUT ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
  104. DEPENDS ${CMAKE_COMMAND}
  105. )
  106. target_sources(complex PRIVATE ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h)
  107. # Test creating an executable that is not built by default.
  108. add_executable(notInAllExe EXCLUDE_FROM_ALL notInAllExe.cxx)
  109. target_link_libraries(notInAllExe notInAllLib)
  110. # Test user-value flag mapping for the VS IDE.
  111. if(MSVC)
  112. set_target_properties(notInAllExe PROPERTIES
  113. LINK_FLAGS "/NODEFAULTLIB:LIBC;LIBCMT;MSVCRT")
  114. endif()
  115. # Test creating a custom target that builds not-in-all targets.
  116. add_custom_target(notInAllCustom)
  117. add_dependencies(notInAllCustom notInAllExe)
  118. if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_INCLUDE_SYSTEM_FLAG_CXX
  119. AND NOT XCODE) # XCODE is excluded due to #15687
  120. add_executable(testSystemDir testSystemDir.cxx)
  121. set_target_properties(testSystemDir PROPERTIES COMPILE_FLAGS "-Werror")
  122. endif()
  123. #
  124. # Extra coverage.Not used.
  125. #
  126. install_targets(/tmp complex)
  127. install_programs(/tmp complex)
  128. configure_file(
  129. ${Complex_SOURCE_DIR}/Executable/cmVersion.h.in
  130. ${Complex_BINARY_DIR}/cmVersion.h)
  131. source_group(A_GROUP ".cxx")
  132. source_group(B_GROUP REGULAR_EXPRESSION "cxx")
  133. source_group(C_GROUP FILES complex.cxx)
  134. file(WRITE ${Complex_BINARY_DIR}/A/libA.a "test")
  135. file(WRITE ${Complex_BINARY_DIR}/A/libC.a "test")
  136. file(WRITE ${Complex_BINARY_DIR}/B/libB.a "test")
  137. file(WRITE ${Complex_BINARY_DIR}/B/libA.a "test")
  138. file(WRITE ${Complex_BINARY_DIR}/C/libC.a "test")
  139. file(WRITE ${Complex_BINARY_DIR}/C/libB.a "test")