@@ -36,6 +36,8 @@ set(TurboJpegBinBaseDir "${CMAKE_BINARY_DIR}/libjpeg-turbo")
3636
3737# ======== CMake arguments for libjpeg-turbo ========
3838set (LibJpegTurboArgs
39+ -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
40+ -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
3941 -DENABLE_STATIC=FALSE
4042 -DWITH_FUZZ=FALSE
4143 -DWITH_JPEG=FALSE
@@ -47,48 +49,48 @@ if(WIN32 AND NOT ${CMAKE_HOST_SYSTEM_NAME} STREQUAL "Linux")
4749 list (APPEND LibJpegTurboArgs -DCMAKE_ASM_NASM_COMPILER=${NASMPATH} )
4850endif ()
4951
50- # ======== Add ExternalProject ========
51- ExternalProject_Add (libjpeg-turbo
52- SOURCE_DIR ${LibJpegTurboFolder}
53- BINARY_DIR ${TurboJpegBinBaseDir}
54- CMAKE_ARGS ${LibJpegTurboArgs}
55- INSTALL_COMMAND ""
56- BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR > --config $<CONFIG > --target turbojpeg
57- )
52+ # Support Custom runtime and library output directories
53+ if (CMAKE_RUNTIME_OUTPUT_DIRECTORY )
54+ set (JPG_RUNTIME_OUTPUT_DIR ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} )
55+ else ()
56+ set (JPG_RUNTIME_OUTPUT_DIR ${TurboJpegBinBaseDir} )
57+ endif ()
58+
59+
60+ if (CMAKE_LIBRARY_OUTPUT_DIRECTORY )
61+ set (JPG_LIB_OUTPUT_DIR ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} )
62+ else ()
63+ set (JPG_LIB_OUTPUT_DIR ${TurboJpegBinBaseDir} )
64+ endif ()
5865
5966# ======== Declare Imported Library ========
6067add_library (libjpeg-turbo::libjpeg-turbo SHARED IMPORTED GLOBAL )
68+ set (JPG_IMPORTED_LOCATION "" )
69+ set (JPG_IMPORTED_IMPLIB "" )
70+
6171
6272if (IS_MULTI_CONFIG)
6373 # Multi-config: set per-config imported locations
6474 foreach (cfg ${CMAKE_CONFIGURATION_TYPES} )
6575 string (TOUPPER "${cfg} " cfg_upper)
66- set (cfg_bin_dir "${TurboJpegBinBaseDir} /${cfg} " )
67-
68- # Set runtime library
69- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
70- "IMPORTED_LOCATION_${cfg_upper} " "${cfg_bin_dir} /${JPG_RUNTIME_NAME} "
71- )
7276
77+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
78+ "IMPORTED_LOCATION_${cfg_upper} " "${JPG_RUNTIME_OUTPUT_DIR} /${cfg} /${JPG_RUNTIME_NAME} " )
7379 # Set import library on Windows
7480 if (WIN32 )
75- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
76- "IMPORTED_IMPLIB_${cfg_upper} " "${cfg_bin_dir} /${JPG_IMPLIB_NAME} "
77- )
81+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
82+ "IMPORTED_IMPLIB_${cfg_upper} " "${JPG_LIB_OUTPUT_DIR} /${cfg} /${JPG_IMPLIB_NAME} " )
7883 endif ()
7984 endforeach ()
8085else ()
8186 # Single-config: flat directory
82- set (cfg_bin_dir "${TurboJpegBinBaseDir} " )
83- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
84- IMPORTED_LOCATION "${cfg_bin_dir} /${JPG_RUNTIME_NAME} "
85- )
87+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES IMPORTED_LOCATION
88+ "${JPG_RUNTIME_OUTPUT_DIR} /${JPG_RUNTIME_NAME} " )
8689
8790 # Set import library on Windows
8891 if (WIN32 )
89- set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES
90- IMPORTED_IMPLIB "${cfg_bin_dir} /${JPG_IMPLIB_NAME} "
91- )
92+ set_target_properties (libjpeg-turbo::libjpeg-turbo PROPERTIES IMPORTED_IMPLIB
93+ "${JPG_LIB_OUTPUT_DIR} /${JPG_IMPLIB_NAME} " )
9294 endif ()
9395endif ()
9496
@@ -97,12 +99,21 @@ set_target_properties(libjpeg-turbo::libjpeg-turbo PROPERTIES
9799 INTERFACE_INCLUDE_DIRECTORIES "${LibJpegTurboFolder} /src"
98100)
99101
102+ # ======== Add ExternalProject ========
103+ ExternalProject_Add (libjpeg-turbo
104+ SOURCE_DIR ${LibJpegTurboFolder}
105+ BINARY_DIR ${TurboJpegBinBaseDir}
106+ CMAKE_ARGS ${LibJpegTurboArgs}
107+ INSTALL_COMMAND ""
108+ BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR > --config $<CONFIG > --target turbojpeg
109+ BYPRODUCTS ${JPG_IMPORTED_LOCATION}
110+ $<$<PLATFORM_ID :Windows >:${JPG_IMPORTED_IMPLIB} >
111+ )
112+
100113# ======== Depend on ExternalProject ========
101114add_dependencies (libjpeg-turbo::libjpeg-turbo libjpeg-turbo )
102115
103116
104-
105- # =========================
106117# =========================
107118
108119 file (GLOB_RECURSE sourceFiles
@@ -115,28 +126,6 @@ add_library (${TargetName} ${sourceFiles} )
115126
116127target_link_libraries (${TargetName} PRIVATE libjpeg-turbo::libjpeg-turbo ) # adjust to match built target name
117128
118- # ======== Copy runtime to ${CMAKE_CURRENT_BINARY_DIR} ========
119- if (IS_MULTI_CONFIG)
120- # Copy all configs' DLLs/SOs/DYLIBs
121- foreach (cfg ${CMAKE_CONFIGURATION_TYPES} )
122- add_custom_command (TARGET ${TargetName} POST_BUILD
123- COMMAND ${CMAKE_COMMAND} -E copy_if_different
124- "$<TARGET_FILE :libjpeg -turbo ::libjpeg -turbo >"
125- "${CMAKE_CURRENT_BINARY_DIR} /$<CONFIGURATION >/" )
126-
127- endforeach ()
128- else ()
129-
130- add_custom_command (TARGET ${TargetName} POST_BUILD
131- COMMAND ${CMAKE_COMMAND} -E copy_if_different
132- "$<TARGET_FILE :libjpeg -turbo ::libjpeg -turbo >"
133- "${CMAKE_CURRENT_BINARY_DIR} /" )
134- endif ()
135-
136-
137- target_include_directories (${TargetName} PRIVATE ${LibJpegTurboFolder} /src )
138-
139129if (${CMAKE_SYSTEM_NAME} MATCHES "Windows" AND (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC" OR CMAKE_CXX_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" ) AND NOT MINGW)
140130 target_link_options (${TargetName} PUBLIC "/DELAYLOAD:turbojpeg.dll" )
141- else ()
142131endif ()
0 commit comments