diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-10-16 15:28:13 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-10-16 15:28:13 +0200 |
| commit | 576a075d309056382cadc26ddf04c9eb779114a0 (patch) | |
| tree | 8e19c18bcec72af76f210578a6a0755b4fe9d89c | |
| parent | 22fcf6689e0a718a5c28a09446b30566ec30a2b0 (diff) | |
| download | PROJ-576a075d309056382cadc26ddf04c9eb779114a0.tar.gz PROJ-576a075d309056382cadc26ddf04c9eb779114a0.zip | |
CMake: fix invproj/invgeod generation on Windows when building with an explicit configuration
| -rw-r--r-- | src/bin_geod.cmake | 35 | ||||
| -rw-r--r-- | src/bin_proj.cmake | 38 |
2 files changed, 41 insertions, 32 deletions
diff --git a/src/bin_geod.cmake b/src/bin_geod.cmake index 4d91628a..3f3f9bf5 100644 --- a/src/bin_geod.cmake +++ b/src/bin_geod.cmake @@ -21,10 +21,11 @@ endif() # invgeod target: symlink or copy of geod executable -set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invgeod${CMAKE_EXECUTABLE_SUFFIX}") -set(link_source "geod${CMAKE_EXECUTABLE_SUFFIX}") - if(UNIX) + + set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invgeod${CMAKE_EXECUTABLE_SUFFIX}") + set(link_source "geod${CMAKE_EXECUTABLE_SUFFIX}") + add_custom_command( OUTPUT ${link_target} COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} @@ -33,20 +34,22 @@ if(UNIX) COMMENT "Generating invgeod" VERBATIM ) + + add_custom_target(invgeod ALL DEPENDS ${link_target}) + + install(FILES ${link_target} DESTINATION ${BINDIR}) + else() - # symlinks are supported on Windows in cmake >= 3.17, but - # symlinks on Windows are a bit tricky, so just copy - add_custom_command( - OUTPUT ${link_target} - COMMAND ${CMAKE_COMMAND} -E copy ${link_source} ${link_target} - WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" - DEPENDS geod - COMMENT "Generating invgeod" - VERBATIM - ) -endif() + add_executable(invgeod ${GEOD_SRC} ${GEOD_INCLUDE}) + target_link_libraries(invgeod PRIVATE ${PROJ_LIBRARIES}) + target_compile_options(invgeod PRIVATE ${PROJ_CXX_WARN_FLAGS}) -add_custom_target(invgeod ALL DEPENDS ${link_target}) + install(TARGETS invgeod + DESTINATION ${BINDIR}) -install(FILES ${link_target} DESTINATION ${BINDIR}) + if(MSVC AND BUILD_SHARED_LIBS) + target_compile_definitions(invgeod PRIVATE PROJ_MSVC_DLL_IMPORT=1) + endif() + +endif() diff --git a/src/bin_proj.cmake b/src/bin_proj.cmake index 2976b3da..163303f8 100644 --- a/src/bin_proj.cmake +++ b/src/bin_proj.cmake @@ -22,10 +22,11 @@ endif() # invproj target: symlink or copy of proj executable -set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}") -set(link_source "proj${CMAKE_EXECUTABLE_SUFFIX}") - if(UNIX) + + set(link_target "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/invproj${CMAKE_EXECUTABLE_SUFFIX}") + set(link_source "proj${CMAKE_EXECUTABLE_SUFFIX}") + add_custom_command( OUTPUT ${link_target} COMMAND ${CMAKE_COMMAND} -E create_symlink ${link_source} ${link_target} @@ -34,20 +35,25 @@ if(UNIX) COMMENT "Generating invproj" VERBATIM ) + + add_custom_target(invproj ALL DEPENDS ${link_target}) + + install(FILES ${link_target} DESTINATION ${BINDIR}) + else() - # symlinks are supported on Windows in cmake >= 3.17, but - # symlinks on Windows are a bit tricky, so just copy - add_custom_command( - OUTPUT ${link_target} - COMMAND ${CMAKE_COMMAND} -E copy ${link_source} ${link_target} - WORKING_DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" - DEPENDS binproj - COMMENT "Generating invproj" - VERBATIM - ) -endif() + add_executable(invproj ${PROJ_SRC}) + set_target_properties(invproj + PROPERTIES + RUNTIME_OUTPUT_NAME proj) + target_link_libraries(invproj PRIVATE ${PROJ_LIBRARIES}) + target_compile_options(invproj PRIVATE ${PROJ_CXX_WARN_FLAGS}) -add_custom_target(invproj ALL DEPENDS ${link_target}) + install(TARGETS invproj + DESTINATION ${BINDIR}) -install(FILES ${link_target} DESTINATION ${BINDIR}) + if(MSVC AND BUILD_SHARED_LIBS) + target_compile_definitions(invproj PRIVATE PROJ_MSVC_DLL_IMPORT=1) + endif() + +endif() |
