CMakeLists.txt 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. cmake_minimum_required(VERSION 2.8)
  2. project(PDBDirectoryAndName C)
  3. # Make sure the proper compiler is in use.
  4. if(NOT MSVC AND NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
  5. message(FATAL_ERROR "The PDBDirectoryAndName test works only with MSVC or Intel")
  6. endif()
  7. # Intel 11.1 does not support /Fd but Intel 14.0 does.
  8. # TODO: Did a version in between these add it?
  9. if(CMAKE_C_COMPILER_ID STREQUAL Intel AND
  10. CMAKE_C_COMPILER_VERSION VERSION_LESS 14.0)
  11. set(NO_COMPILE_PDB 1)
  12. endif()
  13. set(my_targets "")
  14. add_library(mylibA SHARED mylibA.c)
  15. set_target_properties(mylibA PROPERTIES
  16. PDB_NAME "mylibA_Special"
  17. PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mylibA_PDB"
  18. )
  19. list(APPEND my_targets mylibA)
  20. add_library(mylibB STATIC mylibB.c)
  21. set_target_properties(mylibB PROPERTIES
  22. COMPILE_PDB_NAME "mylibB_Special"
  23. COMPILE_PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/mylibB_PDB"
  24. )
  25. if(NOT NO_COMPILE_PDB)
  26. list(APPEND my_targets mylibB)
  27. endif()
  28. add_library(mylibC SHARED mylibC.c)
  29. set_target_properties(mylibC PROPERTIES
  30. PDB_NAME "mylibC_Special"
  31. )
  32. list(APPEND my_targets mylibC)
  33. add_library(mylibD STATIC mylibD.c)
  34. set_target_properties(mylibD PROPERTIES
  35. COMPILE_PDB_NAME "mylibD_Special"
  36. )
  37. if(NOT NO_COMPILE_PDB)
  38. list(APPEND my_targets mylibD)
  39. endif()
  40. add_executable(myexe myexe.c)
  41. set_target_properties(myexe PROPERTIES
  42. PDB_NAME "myexe_Special"
  43. PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/myexe_PDB"
  44. )
  45. list(APPEND my_targets myexe)
  46. target_link_libraries(myexe mylibA mylibB mylibC mylibD)
  47. add_executable(myexe2 myexe2.c)
  48. set_target_properties(myexe2 PROPERTIES
  49. PDB_NAME "myexe2_Special"
  50. )
  51. list(APPEND my_targets myexe2)
  52. target_link_libraries(myexe2 mylibA mylibD)
  53. #-----------------------------------------------------------------------------
  54. # Check that PDB files actually appear where expected.
  55. # The PDB_NAME and PDB_OUTPUT_DIRECTORY options do not work in VS 6.
  56. if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6")
  57. return()
  58. endif()
  59. set(pdbs "")
  60. foreach(t ${my_targets})
  61. get_property(pdb_name TARGET ${t} PROPERTY PDB_NAME)
  62. get_property(pdb_dir TARGET ${t} PROPERTY PDB_OUTPUT_DIRECTORY)
  63. if(NOT pdb_name)
  64. get_property(pdb_name TARGET ${t} PROPERTY COMPILE_PDB_NAME)
  65. endif()
  66. if(NOT pdb_dir)
  67. get_property(pdb_dir TARGET ${t} PROPERTY COMPILE_PDB_OUTPUT_DIRECTORY)
  68. endif()
  69. if(NOT pdb_dir)
  70. set(pdb_dir ${CMAKE_CURRENT_BINARY_DIR})
  71. endif()
  72. list(APPEND pdbs ${pdb_dir}/${CMAKE_CFG_INTDIR}/${pdb_name}.pdb)
  73. endforeach()
  74. add_custom_target(check_pdbs ALL VERBATIM
  75. COMMAND ${CMAKE_COMMAND} -Dconfig=$<CONFIGURATION> "-Dpdbs=${pdbs}"
  76. -P ${CMAKE_CURRENT_SOURCE_DIR}/check_pdbs.cmake
  77. )
  78. add_dependencies(check_pdbs ${my_targets})