CMakeLists.txt 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. cmake_minimum_required(VERSION 2.8.11)
  2. cmake_policy(SET CMP0054 NEW)
  3. project(AliasTarget)
  4. set(CMAKE_CXX_STANDARD 98)
  5. # Clang/C2 in C++98 mode cannot properly handle some of MSVC headers
  6. if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND
  7. CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
  8. set(CMAKE_CXX_STANDARD 11)
  9. endif()
  10. add_library(foo SHARED empty.cpp)
  11. add_library(PREFIX::Foo ALIAS foo)
  12. add_library(Another::Alias ALIAS foo)
  13. add_library(objects OBJECT object.cpp)
  14. add_library(Alias::Objects ALIAS objects)
  15. target_compile_definitions(foo PUBLIC FOO_DEFINE)
  16. add_library(bar SHARED empty.cpp)
  17. target_compile_definitions(bar PUBLIC BAR_DEFINE)
  18. target_link_libraries(foo LINK_PUBLIC $<$<STREQUAL:$<TARGET_PROPERTY:PREFIX::Foo,ALIASED_TARGET>,foo>:bar>)
  19. add_executable(AliasTarget commandgenerator.cpp $<TARGET_OBJECTS:Alias::Objects>)
  20. add_executable(PREFIX::AliasTarget ALIAS AliasTarget)
  21. add_executable(Generator::Command ALIAS AliasTarget)
  22. add_custom_command(OUTPUT commandoutput.h COMMAND Generator::Command)
  23. add_library(bat SHARED bat.cpp "${CMAKE_CURRENT_BINARY_DIR}/commandoutput.h")
  24. target_link_libraries(bat PREFIX::Foo)
  25. target_include_directories(bat PRIVATE "${CMAKE_CURRENT_BINARY_DIR}")
  26. add_executable(targetgenerator targetgenerator.cpp)
  27. add_executable(Generator::Target ALIAS targetgenerator)
  28. add_subdirectory(subdir)
  29. add_custom_target(usealias Generator::Target $<TARGET_FILE:Sub::tgt>)
  30. add_dependencies(bat usealias)
  31. if (NOT TARGET Another::Alias)
  32. message(SEND_ERROR "Another::Alias is not considered a target.")
  33. endif()
  34. get_target_property(_alt PREFIX::Foo ALIASED_TARGET)
  35. if (NOT ${_alt} STREQUAL foo)
  36. message(SEND_ERROR "ALIASED_TARGET is not foo: ${_alt}")
  37. endif()
  38. get_property(_alt2 TARGET PREFIX::Foo PROPERTY ALIASED_TARGET)
  39. if (NOT ${_alt2} STREQUAL foo)
  40. message(SEND_ERROR "ALIASED_TARGET is not foo.")
  41. endif()
  42. add_library(iface INTERFACE)
  43. add_library(Alias::Iface ALIAS iface)
  44. get_property(_aliased_target_set TARGET foo PROPERTY ALIASED_TARGET SET)
  45. if(_aliased_target_set)
  46. message(SEND_ERROR "ALIASED_TARGET is set for target foo")
  47. endif()
  48. get_target_property(_notAlias1 foo ALIASED_TARGET)
  49. if (NOT DEFINED _notAlias1)
  50. message(SEND_ERROR "_notAlias1 is not defined")
  51. endif()
  52. if (_notAlias1)
  53. message(SEND_ERROR "_notAlias1 is defined, but foo is not an ALIAS")
  54. endif()
  55. if (NOT _notAlias1 STREQUAL _notAlias1-NOTFOUND)
  56. message(SEND_ERROR "_notAlias1 not defined to a -NOTFOUND variant")
  57. endif()
  58. get_property(_notAlias2 TARGET foo PROPERTY ALIASED_TARGET)
  59. if (_notAlias2)
  60. message(SEND_ERROR "_notAlias2 evaluates to true, but foo is not an ALIAS")
  61. endif()