windows-conflict.cmake 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. enable_language(C)
  2. set(test1_names path)
  3. set(test2_names path)
  4. file(WRITE "${CMAKE_BINARY_DIR}/path.c" "__declspec(dllexport) void path(void) {}\n")
  5. add_library(path SHARED "${CMAKE_BINARY_DIR}/path.c")
  6. file(REMOVE "${CMAKE_BINARY_DIR}/test1.c")
  7. add_library(test1 SHARED "${CMAKE_BINARY_DIR}/test1.c")
  8. foreach(name ${test1_names})
  9. file(APPEND "${CMAKE_BINARY_DIR}/test1.c" "__declspec(dllimport) extern void ${name}(void);\n")
  10. endforeach()
  11. file(APPEND "${CMAKE_BINARY_DIR}/test1.c" "__declspec(dllexport) void test1(void)\n{\n")
  12. foreach(name ${test1_names})
  13. file(APPEND "${CMAKE_BINARY_DIR}/test1.c" " ${name}();\n")
  14. endforeach()
  15. file(APPEND "${CMAKE_BINARY_DIR}/test1.c" "}\n")
  16. target_link_libraries(test1 PRIVATE ${test1_names})
  17. file(REMOVE "${CMAKE_BINARY_DIR}/test2.c")
  18. add_library(test2 SHARED "${CMAKE_BINARY_DIR}/test2.c")
  19. foreach(name ${test2_names})
  20. file(APPEND "${CMAKE_BINARY_DIR}/test2.c" "__declspec(dllimport) extern void ${name}(void);\n")
  21. endforeach()
  22. file(APPEND "${CMAKE_BINARY_DIR}/test2.c" "__declspec(dllexport) void test2(void)\n{\n")
  23. foreach(name ${test2_names})
  24. file(APPEND "${CMAKE_BINARY_DIR}/test2.c" " ${name}();\n")
  25. endforeach()
  26. file(APPEND "${CMAKE_BINARY_DIR}/test2.c" "}\n")
  27. target_link_libraries(test2 PRIVATE ${test2_names})
  28. install(TARGETS test1 path DESTINATION lib/test1)
  29. install(TARGETS test2 path DESTINATION lib/test2)
  30. install(CODE [[
  31. file(GET_RUNTIME_DEPENDENCIES
  32. LIBRARIES
  33. "${CMAKE_INSTALL_PREFIX}/lib/test1/$<TARGET_FILE_NAME:test1>"
  34. "${CMAKE_INSTALL_PREFIX}/lib/test2/$<TARGET_FILE_NAME:test2>"
  35. PRE_INCLUDE_REGEXES "^(lib)?path\\.dll$"
  36. PRE_EXCLUDE_REGEXES ".*"
  37. )
  38. message(FATAL_ERROR "This message should not be displayed")
  39. ]])