@@ -63,7 +63,6 @@ if(NOT CMAKE_BUILD_TYPE)
6363 set (CMAKE_BUILD_TYPE debug)
6464endif ()
6565
66- set (CMAKE_EXE_LINKER_FLAGS "/machine:x64" )
6766
6867if (MSVC )
6968 add_definitions (-DUNICODE -D_UNICODE )
@@ -111,25 +110,31 @@ endif()
111110#-----------------------------------------------------------------------------
112111# 定义项目构建中间文件的生成目录
113112#-----------------------------------------------------------------------------
114- set (CMAKE_GENERATOR_PLATFORM x64)
115- if (SOLIDRENDER_WIN)
116- if ("${CMAKE_GENERATOR_PLATFORM } " STREQUAL "x64" )
117- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x64/Debug)
118- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x64/Debug)
119- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x64/Debug)
120- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x64/Release)
121- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x64/Release)
122- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x64/Release)
123- endif ()
113+ # 用指针位数决定输出目录:x64 / x86
114+ if (CMAKE_SIZEOF_VOID_P EQUAL 8)
115+ set (SD_ARCH "x64" )
116+ elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
117+ set (SD_ARCH "x86" )
118+ else ()
119+ message (FATAL_ERROR "Unknown pointer size: ${CMAKE_SIZEOF_VOID_P } " )
120+ endif ()
124121
125- if ("${CMAKE_GENERATOR_PLATFORM } " STREQUAL "Win32" )
126- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x86/Debug)
127- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x86/Debug)
128- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /x86/Debug)
129- set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x86/Release)
130- set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x86/Release)
131- set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /x86/Release)
132- endif ()
122+ # Linux 侧需要 GNUInstallDirs 提供 CMAKE_INSTALL_LIBDIR/BINDIR
123+ if (UNIX AND NOT APPLE )
124+ include (GNUInstallDirs )
125+ endif ()
126+
127+ # 防止误开关:Linux 下不允许走 SOLIDRENDER_WIN 分支
128+ if (SOLIDRENDER_WIN AND NOT WIN32 )
129+ message (FATAL_ERROR "SOLIDRENDER_WIN=ON but WIN32=OFF. Disable SOLIDRENDER_WIN on Linux." )
130+ endif ()
131+ if (SOLIDRENDER_WIN)
132+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /${SD_ARCH} /Debug)
133+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /${SD_ARCH} /Debug)
134+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR } /${SD_ARCH} /Debug)
135+ set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /${SD_ARCH} /Release)
136+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /${SD_ARCH} /Release)
137+ set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR } /${SD_ARCH} /Release)
133138
134139elseif (SOLIDRENDER_LINUX)
135140 set (CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR } /${CMAKE_INSTALL_LIBDIR} )
@@ -237,7 +242,7 @@ endif()
237242add_subdirectory (Alice )
238243
239244# 外部项目(包括第三方库)
240- add_subdirectory (externals )
245+ add_subdirectory (Externals )
241246
242247# 单元测试
243248add_subdirectory (UnitTest )
@@ -252,4 +257,78 @@ endif()
252257
253258
254259
260+
261+
262+
263+ #-----------------------------------------------------------------------------
264+ # Installation
265+ #-----------------------------------------------------------------------------
266+
267+
268+ # 用指针位数决定输出目录:x64 / x86
269+ if (CMAKE_SIZEOF_VOID_P EQUAL 8)
270+ set (SD_ARCH "x64" )
271+ elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
272+ set (SD_ARCH "x86" )
273+ else ()
274+ message (FATAL_ERROR "Unknown pointer size: ${CMAKE_SIZEOF_VOID_P } " )
275+ endif ()
276+
277+ # Linux 侧需要 GNUInstallDirs 提供 CMAKE_INSTALL_LIBDIR/BINDIR
278+ if (UNIX AND NOT APPLE )
279+ include (GNUInstallDirs )
280+ endif ()
281+
282+ # 防止误开关:Linux 下不允许走 SOLIDRENDER_WIN 分支
283+ if (SOLIDRENDER_WIN AND NOT WIN32 )
284+ message (FATAL_ERROR "SOLIDRENDER_WIN=ON but WIN32=OFF. Disable SOLIDRENDER_WIN on Linux." )
285+ endif ()
286+
287+ # 测试target的存在性:
288+ if (TARGET AliceCommandSystem)
289+ message (STATUS "AliceCommandSystem exists in APP scope" )
290+ else ()
291+ message (STATUS "AliceCommandSystem NOT exists in APP scope" )
292+ endif ()
293+
294+
295+ # 建议:统一一个安装目的地根目录(你现在是 INSTALL_DIR/INSTALL)
296+ set (SD_INSTALL_DST "${INSTALL_DIR} /INSTALL" )
297+ message ("SD_INSTALL_DST = ${SD_INSTALL_DST} " )
298+ # 需要安装的目标列表
299+ set (SD_INSTALL_TARGETS
300+ AliceCommandSystem
301+ AlicePropertyBrowser
302+ AliceRibbon
303+ AliceThemeSupport
304+ AliceUiBasicTools
305+ AliceUiFrameWork
306+ XRibbonBar
307+ XToolbar
308+ )
309+
310+ # 可选:提前检查 target 是否存在(更容易定位问题)
311+ foreach (_t IN LISTS SD_INSTALL_TARGETS)
312+ if (NOT TARGET ${_t} )
313+ message (FATAL_ERROR "Install target not found: ${_t} " )
314+ endif ()
315+ endforeach ()
316+
317+ # Windows:必须加 WIN32,避免 Linux/Makefiles 被污染
318+ if (WIN32 AND SOLIDRENDER_WIN)
319+ install (TARGETS ${SD_INSTALL_TARGETS}
320+ RUNTIME DESTINATION "${SD_INSTALL_DST} " # .exe / .dll
321+ ARCHIVE DESTINATION "${SD_INSTALL_DST} " # .lib(静态库或 import lib)
322+ LIBRARY DESTINATION "${SD_INSTALL_DST} " # MinGW: .dll.a;MSVC 通常为空
323+ )
324+
325+ # Linux:同样用 TARGETS,CMake 会把 .so 走到 LIBRARY
326+ elseif (UNIX AND NOT APPLE AND SOLIDRENDER_LINUX)
327+ install (TARGETS ${SD_INSTALL_TARGETS}
328+ RUNTIME DESTINATION "${SD_INSTALL_DST} " # 通常为空(除非是可执行文件)
329+ LIBRARY DESTINATION "${SD_INSTALL_DST} " # .so
330+ ARCHIVE DESTINATION "${SD_INSTALL_DST} " # .a
331+ )
332+ endif ()
333+
255334message ("*--*--*--*--*--*--*--*--*--*--*--End Top Level CmakeList--*--*--*--*--*--*--*--*--*--*--*--*--*" )
0 commit comments