basics.cmake 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. # -----------------------------------------------------------------------------
  2. # Copyright (c) 2014 GarageGames, LLC
  3. #
  4. # Permission is hereby granted, free of charge, to any person obtaining a copy
  5. # of this software and associated documentation files (the "Software"), to
  6. # deal in the Software without restriction, including without limitation the
  7. # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  8. # sell copies of the Software, and to permit persons to whom the Software is
  9. # furnished to do so, subject to the following conditions:
  10. #
  11. # The above copyright notice and this permission notice shall be included in
  12. # all copies or substantial portions of the Software.
  13. #
  14. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  19. # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20. # IN THE SOFTWARE.
  21. # -----------------------------------------------------------------------------
  22. project("Torque3DEngine")
  23. if( CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 8 )
  24. set( TORQUE_CPU_X64 ON )
  25. elseif( CMAKE_CXX_SIZEOF_DATA_PTR EQUAL 4 )
  26. set( TORQUE_CPU_X32 ON )
  27. endif()
  28. if(NOT TORQUE_TEMPLATE)
  29. set(TORQUE_TEMPLATE "Full" CACHE STRING "the template to use")
  30. endif()
  31. if(NOT TORQUE_APP_DIR)
  32. set(TORQUE_APP_DIR "${CMAKE_SOURCE_DIR}/My Projects/${TORQUE_APP_NAME}")
  33. endif()
  34. if(NOT projectOutDir)
  35. set(projectOutDir "${TORQUE_APP_DIR}/game")
  36. endif()
  37. if(NOT projectSrcDir)
  38. set(projectSrcDir "${TORQUE_APP_DIR}/source")
  39. endif()
  40. set(libDir "${CMAKE_SOURCE_DIR}/Engine/lib")
  41. set(srcDir "${CMAKE_SOURCE_DIR}/Engine/source")
  42. set(cmakeDir "${CMAKE_SOURCE_DIR}/Tools/CMake")
  43. # hide some things
  44. mark_as_advanced(CMAKE_INSTALL_PREFIX)
  45. mark_as_advanced(CMAKE_CONFIGURATION_TYPES)
  46. # output folders
  47. #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${projectOutDir}/game)
  48. #set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${projectOutDir}/game)
  49. #set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${projectOutDir}/game)
  50. ###############################################################################
  51. ### Source File Handling
  52. ###############################################################################
  53. # finds and adds sources files in a folder
  54. macro(addPath dir)
  55. set(tmp_files "")
  56. set(glob_config GLOB)
  57. if(${ARGC} GREATER 1 AND "${ARGV1}" STREQUAL "REC")
  58. set(glob_config GLOB_RECURSE)
  59. endif()
  60. set(mac_files "")
  61. if(APPLE)
  62. set(mac_files ${dir}/*.mm ${dir}/*.m)
  63. endif()
  64. file(${glob_config} tmp_files
  65. ${dir}/*.cpp
  66. ${dir}/*.c
  67. ${dir}/*.cc
  68. ${dir}/*.h
  69. ${mac_files}
  70. #${dir}/*.asm
  71. )
  72. foreach(entry ${BLACKLIST})
  73. list(REMOVE_ITEM tmp_files ${dir}/${entry})
  74. endforeach()
  75. LIST(APPEND ${PROJECT_NAME}_files "${tmp_files}")
  76. LIST(APPEND ${PROJECT_NAME}_paths "${dir}")
  77. #message(STATUS "addPath ${PROJECT_NAME} : ${tmp_files}")
  78. endmacro()
  79. # adds a file to the sources
  80. macro(addFile filename)
  81. LIST(APPEND ${PROJECT_NAME}_files "${filename}")
  82. #message(STATUS "addFile ${PROJECT_NAME} : ${filename}")
  83. endmacro()
  84. # finds and adds sources files in a folder recursively
  85. macro(addPathRec dir)
  86. addPath("${dir}" "REC")
  87. endmacro()
  88. ###############################################################################
  89. ### Definition Handling
  90. ###############################################################################
  91. macro(__addDef def config)
  92. # two possibilities: a) target already known, so add it directly, or b) target not yet known, so add it to its cache
  93. if(TARGET ${PROJECT_NAME})
  94. #message(STATUS "directly applying defs: ${PROJECT_NAME} with config ${config}: ${def}")
  95. if("${config}" STREQUAL "")
  96. set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS ${def})
  97. else()
  98. set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:${config}>:${def}>)
  99. endif()
  100. else()
  101. if("${config}" STREQUAL "")
  102. list(APPEND ${PROJECT_NAME}_defs_ ${def})
  103. else()
  104. list(APPEND ${PROJECT_NAME}_defs_ $<$<CONFIG:${config}>:${def}>)
  105. endif()
  106. #message(STATUS "added definition to cache: ${PROJECT_NAME}_defs_: ${${PROJECT_NAME}_defs_}")
  107. endif()
  108. endmacro()
  109. # adds a definition: argument 1: Nothing(for all), _DEBUG, _RELEASE, <more build configurations>
  110. macro(addDef def)
  111. set(def_configs "")
  112. if(${ARGC} GREATER 1)
  113. foreach(config ${ARGN})
  114. __addDef(${def} ${config})
  115. endforeach()
  116. else()
  117. __addDef(${def} "")
  118. endif()
  119. endmacro()
  120. # this applies cached definitions onto the target
  121. macro(_process_defs)
  122. if(DEFINED ${PROJECT_NAME}_defs_)
  123. set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS ${${PROJECT_NAME}_defs_})
  124. #message(STATUS "applying defs to project ${PROJECT_NAME}: ${${PROJECT_NAME}_defs_}")
  125. endif()
  126. endmacro()
  127. ###############################################################################
  128. ### Source Library Handling
  129. ###############################################################################
  130. macro(addLibSrc libPath)
  131. set(cached_project_name ${PROJECT_NAME})
  132. include(${libPath})
  133. project(${cached_project_name})
  134. endmacro()
  135. ###############################################################################
  136. ### Linked Library Handling
  137. ###############################################################################
  138. macro(addLib libs)
  139. foreach(lib ${libs})
  140. # check if we can build it ourselfs
  141. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  142. addLibSrc("${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  143. endif()
  144. # then link against it
  145. # two possibilities: a) target already known, so add it directly, or b) target not yet known, so add it to its cache
  146. if(TARGET ${PROJECT_NAME})
  147. target_link_libraries(${PROJECT_NAME} "${lib}")
  148. else()
  149. list(APPEND ${PROJECT_NAME}_libs ${lib})
  150. endif()
  151. endforeach()
  152. endmacro()
  153. #addLibRelease will add to only release builds
  154. macro(addLibRelease libs)
  155. foreach(lib ${libs})
  156. # check if we can build it ourselfs
  157. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  158. addLibSrc("${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  159. endif()
  160. # then link against it
  161. # two possibilities: a) target already known, so add it directly, or b) target not yet known, so add it to its cache
  162. if(TARGET ${PROJECT_NAME})
  163. target_link_libraries(${PROJECT_NAME} optimized "${lib}")
  164. else()
  165. list(APPEND ${PROJECT_NAME}_libsRelease ${lib})
  166. endif()
  167. endforeach()
  168. endmacro()
  169. #addLibDebug will add to only debug builds
  170. macro(addLibDebug libs)
  171. foreach(lib ${libs})
  172. # check if we can build it ourselfs
  173. if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  174. addLibSrc("${CMAKE_CURRENT_SOURCE_DIR}/libraries/${lib}.cmake")
  175. endif()
  176. # then link against it
  177. # two possibilities: a) target already known, so add it directly, or b) target not yet known, so add it to its cache
  178. if(TARGET ${PROJECT_NAME})
  179. target_link_libraries(${PROJECT_NAME} debug "${lib}")
  180. else()
  181. list(APPEND ${PROJECT_NAME}_libsDebug ${lib})
  182. endif()
  183. endforeach()
  184. endmacro()
  185. # this applies cached definitions onto the target
  186. macro(_process_libs)
  187. if(DEFINED ${PROJECT_NAME}_libs)
  188. target_link_libraries(${PROJECT_NAME} "${${PROJECT_NAME}_libs}")
  189. endif()
  190. if(DEFINED ${PROJECT_NAME}_libsRelease)
  191. target_link_libraries(${PROJECT_NAME} optimized "${${PROJECT_NAME}_libsRelease}")
  192. endif()
  193. if(DEFINED ${PROJECT_NAME}_libsDebug)
  194. target_link_libraries(${PROJECT_NAME} debug "${${PROJECT_NAME}_libsDebug}")
  195. endif()
  196. endmacro()
  197. # apple frameworks
  198. macro(addFramework framework)
  199. if (APPLE)
  200. addLib("-framework ${framework}")
  201. endif()
  202. endmacro()
  203. ###############################################################################
  204. ### Include Handling
  205. ###############################################################################
  206. macro(addInclude incPath)
  207. if(TARGET ${PROJECT_NAME})
  208. set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES "${incPath}")
  209. else()
  210. list(APPEND ${PROJECT_NAME}_includes ${incPath})
  211. endif()
  212. endmacro()
  213. # this applies cached definitions onto the target
  214. macro(_process_includes)
  215. if(DEFINED ${PROJECT_NAME}_includes)
  216. set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY INCLUDE_DIRECTORIES "${${PROJECT_NAME}_includes}")
  217. endif()
  218. endmacro()
  219. ###############################################################################
  220. macro(_postTargetProcess)
  221. _process_includes()
  222. _process_defs()
  223. _process_libs()
  224. endmacro()
  225. # adds a path to search for libs
  226. macro(addLibPath dir)
  227. link_directories(${dir})
  228. endmacro()
  229. # creates a proper filter for VS
  230. macro(generateFilters relDir)
  231. foreach(f ${${PROJECT_NAME}_files})
  232. # Get the path of the file relative to ${DIRECTORY},
  233. # then alter it (not compulsory)
  234. file(RELATIVE_PATH SRCGR ${relDir} ${f})
  235. set(SRCGR "${PROJECT_NAME}/${SRCGR}")
  236. # Extract the folder, ie remove the filename part
  237. string(REGEX REPLACE "(.*)(/[^/]*)$" "\\1" SRCGR ${SRCGR})
  238. # do not have any ../ dirs
  239. string(REPLACE "../" "" SRCGR ${SRCGR})
  240. # Source_group expects \\ (double antislash), not / (slash)
  241. string(REPLACE / \\ SRCGR ${SRCGR})
  242. #STRING(REPLACE "//" "/" SRCGR ${SRCGR})
  243. #message(STATUS "FILE: ${f} -> ${SRCGR}")
  244. source_group("${SRCGR}" FILES ${f})
  245. endforeach()
  246. endmacro()
  247. # creates a proper filter for VS
  248. macro(generateFiltersSpecial relDir)
  249. foreach(f ${${PROJECT_NAME}_files})
  250. # Get the path of the file relative to ${DIRECTORY},
  251. # then alter it (not compulsory)
  252. file(RELATIVE_PATH SRCGR ${relDir} ${f})
  253. set(SRCGR "torque3d/${SRCGR}")
  254. # Extract the folder, ie remove the filename part
  255. string(REGEX REPLACE "(.*)(/[^/]*)$" "\\1" SRCGR ${SRCGR})
  256. # do not have any ../ dirs
  257. string(REPLACE "../" "" SRCGR ${SRCGR})
  258. IF("${SRCGR}" MATCHES "^torque3d/My Projects/.*$")
  259. string(REPLACE "torque3d/My Projects/${PROJECT_NAME}/" "" SRCGR ${SRCGR})
  260. string(REPLACE "/source" "" SRCGR ${SRCGR})
  261. endif()
  262. # Source_group expects \\ (double antislash), not / (slash)
  263. string(REPLACE / \\ SRCGR ${SRCGR})
  264. #STRING(REPLACE "//" "/" SRCGR ${SRCGR})
  265. IF(EXISTS "${f}" AND NOT IS_DIRECTORY "${f}")
  266. #message(STATUS "FILE: ${f} -> ${SRCGR}")
  267. source_group("${SRCGR}" FILES ${f})
  268. endif()
  269. endforeach()
  270. endmacro()
  271. # macro to add a static library
  272. macro(finishLibrary)
  273. # more paths?
  274. if(${ARGC} GREATER 0)
  275. foreach(dir ${ARGV0})
  276. addPath("${dir}")
  277. endforeach()
  278. endif()
  279. # now inspect the paths we got
  280. set(firstDir "")
  281. foreach(dir ${${PROJECT_NAME}_paths})
  282. if("${firstDir}" STREQUAL "")
  283. set(firstDir "${dir}")
  284. endif()
  285. endforeach()
  286. generateFilters("${firstDir}")
  287. # set per target compile flags
  288. if(TORQUE_CXX_FLAGS_${PROJECT_NAME})
  289. set_source_files_properties(${${PROJECT_NAME}_files} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_${PROJECT_NAME}}")
  290. else()
  291. set_source_files_properties(${${PROJECT_NAME}_files} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_LIBS}")
  292. endif()
  293. if(TORQUE_STATIC)
  294. add_library("${PROJECT_NAME}" STATIC ${${PROJECT_NAME}_files})
  295. else()
  296. add_library("${PROJECT_NAME}" SHARED ${${PROJECT_NAME}_files})
  297. endif()
  298. # omg - only use the first folder ... otherwise we get lots of header name collisions
  299. #foreach(dir ${${PROJECT_NAME}_paths})
  300. addInclude("${firstDir}")
  301. #endforeach()
  302. _postTargetProcess()
  303. endmacro()
  304. # macro to add an executable
  305. macro(finishExecutable)
  306. # now inspect the paths we got
  307. set(firstDir "")
  308. foreach(dir ${${PROJECT_NAME}_paths})
  309. if("${firstDir}" STREQUAL "")
  310. set(firstDir "${dir}")
  311. endif()
  312. endforeach()
  313. generateFiltersSpecial("${firstDir}")
  314. # set per target compile flags
  315. if(TORQUE_CXX_FLAGS_${PROJECT_NAME})
  316. set_source_files_properties(${${PROJECT_NAME}_files} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_${PROJECT_NAME}}")
  317. else()
  318. set_source_files_properties(${${PROJECT_NAME}_files} PROPERTIES COMPILE_FLAGS "${TORQUE_CXX_FLAGS_EXECUTABLES}")
  319. endif()
  320. if (APPLE)
  321. set(ICON_FILE "${projectSrcDir}/torque.icns")
  322. set_source_files_properties(${ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
  323. add_executable("${PROJECT_NAME}" MACOSX_BUNDLE ${ICON_FILE} ${${PROJECT_NAME}_files})
  324. else()
  325. add_executable("${PROJECT_NAME}" WIN32 ${${PROJECT_NAME}_files})
  326. endif()
  327. addInclude("${firstDir}")
  328. _postTargetProcess()
  329. endmacro()
  330. macro(setupVersionNumbers)
  331. set(TORQUE_APP_VERSION_MAJOR 1 CACHE INTEGER "")
  332. set(TORQUE_APP_VERSION_MINOR 0 CACHE INTEGER "")
  333. set(TORQUE_APP_VERSION_PATCH 0 CACHE INTEGER "")
  334. set(TORQUE_APP_VERSION_TWEAK 0 CACHE INTEGER "")
  335. mark_as_advanced(TORQUE_APP_VERSION_TWEAK)
  336. MATH(EXPR TORQUE_APP_VERSION "${TORQUE_APP_VERSION_MAJOR} * 1000 + ${TORQUE_APP_VERSION_MINOR} * 100 + ${TORQUE_APP_VERSION_PATCH} * 10 + ${TORQUE_APP_VERSION_TWEAK}")
  337. set(TORQUE_APP_VERSION_STRING "${TORQUE_APP_VERSION_MAJOR}.${TORQUE_APP_VERSION_MINOR}.${TORQUE_APP_VERSION_PATCH}.${TORQUE_APP_VERSION_TWEAK}")
  338. #message(STATUS "version numbers: ${TORQUE_APP_VERSION} / ${TORQUE_APP_VERSION_STRING}")
  339. endmacro()
  340. macro(setupPackaging)
  341. INCLUDE(CPack)
  342. # only enable zips for now
  343. set(CPACK_BINARY_NSIS OFF CACHE INTERNAL "" FORCE)
  344. set(CPACK_BINARY_ZIP ON CACHE INTERNAL "" FORCE)
  345. set(CPACK_SOURCE_ZIP OFF CACHE INTERNAL "" FORCE)
  346. SET(CPACK_GENERATOR "ZIP")
  347. SET(CPACK_PACKAGE_VENDOR "${PROJECT_NAME}")
  348. SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME}")
  349. SET(CPACK_INCLUDE_TOPLEVEL_DIRECTORY 1)
  350. SET(CPACK_OUTPUT_FILE_PREFIX "${TORQUE_APP_DIR}/packages/${PROJECT_NAME}")
  351. SET(CPACK_PACKAGE_INSTALL_DIRECTORY "")
  352. #SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/ReadMe.txt")
  353. #SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/Copyright.txt")
  354. SET(CPACK_PACKAGE_VERSION_MAJOR "${TORQUE_APP_VERSION_MAJOR}")
  355. SET(CPACK_PACKAGE_VERSION_MINOR "${TORQUE_APP_VERSION_MINOR}")
  356. SET(CPACK_PACKAGE_VERSION_PATCH "${TORQUE_APP_VERSION_PATCH}")
  357. #SET(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "${PROJECT_NAME}")
  358. SET(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${TORQUE_APP_VERSION_STRING}")
  359. #SET(CPACK_SOURCE_STRIP_FILES "")
  360. endmacro()
  361. # always static for now
  362. set(TORQUE_STATIC ON)
  363. #option(TORQUE_STATIC "enables or disable static" OFF)
  364. if(WIN32)
  365. set(TORQUE_CXX_FLAGS_EXECUTABLES "/wd4018 /wd4100 /wd4121 /wd4127 /wd4130 /wd4244 /wd4245 /wd4389 /wd4511 /wd4512 /wd4800 /wd4995 " CACHE TYPE STRING)
  366. mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES)
  367. set(TORQUE_CXX_FLAGS_LIBS "/W0" CACHE TYPE STRING)
  368. mark_as_advanced(TORQUE_CXX_FLAGS_LIBS)
  369. set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "-DUNICODE -D_UNICODE -D_CRT_SECURE_NO_WARNINGS /MP /O2 /Ob2 /Oi /Ot /Oy /GT /Zi /W4 /nologo /GF /EHsc /GS- /Gy- /Qpar- /fp:precise /fp:except- /GR /Zc:wchar_t-" )
  370. if( TORQUE_CPU_X32 )
  371. set(TORQUE_CXX_FLAGS_COMMON_DEFAULT "${TORQUE_CXX_FLAGS_COMMON_DEFAULT} /arch:SSE2")
  372. endif()
  373. set(TORQUE_CXX_FLAGS_COMMON ${TORQUE_CXX_FLAGS_COMMON_DEFAULT} CACHE TYPE STRING)
  374. mark_as_advanced(TORQUE_CXX_FLAGS_COMMON)
  375. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORQUE_CXX_FLAGS_COMMON}")
  376. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}")
  377. set(CMAKE_EXE_LINKER_FLAGS "/LARGEADDRESSAWARE")
  378. #set(STATIC_LIBRARY_FLAGS "/OPT:NOREF")
  379. # Force static runtime libraries
  380. if(TORQUE_STATIC)
  381. FOREACH(flag
  382. CMAKE_C_FLAGS_RELEASE
  383. CMAKE_C_FLAGS_RELWITHDEBINFO
  384. CMAKE_C_FLAGS_DEBUG
  385. CMAKE_C_FLAGS_DEBUG_INIT
  386. CMAKE_CXX_FLAGS_RELEASE
  387. CMAKE_CXX_FLAGS_RELWITHDEBINFO
  388. CMAKE_CXX_FLAGS_DEBUG
  389. CMAKE_CXX_FLAGS_DEBUG_INIT)
  390. STRING(REPLACE "/MD" "/MT" "${flag}" "${${flag}}")
  391. SET("${flag}" "${${flag}} /EHsc")
  392. ENDFOREACH()
  393. endif()
  394. else()
  395. # TODO: improve default settings on other platforms
  396. set(TORQUE_CXX_FLAGS_EXECUTABLES "" CACHE TYPE STRING)
  397. mark_as_advanced(TORQUE_CXX_FLAGS_EXECUTABLES)
  398. set(TORQUE_CXX_FLAGS_LIBS "" CACHE TYPE STRING)
  399. mark_as_advanced(TORQUE_CXX_FLAGS_LIBS)
  400. set(TORQUE_CXX_FLAGS_COMMON "" CACHE TYPE STRING)
  401. mark_as_advanced(TORQUE_CXX_FLAGS)
  402. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORQUE_CXX_FLAGS}")
  403. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}")
  404. endif()
  405. if(UNIX AND NOT APPLE)
  406. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${projectOutDir}")
  407. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${projectOutDir}")
  408. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${projectOutDir}")
  409. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${projectOutDir}")
  410. endif()
  411. if(APPLE)
  412. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${projectOutDir}")
  413. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${projectOutDir}")
  414. SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${projectOutDir}")
  415. set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${projectOutDir}")
  416. endif()
  417. # fix the debug/release subfolders on windows
  418. if(MSVC)
  419. SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY" "${projectOutDir}")
  420. FOREACH(CONF ${CMAKE_CONFIGURATION_TYPES})
  421. # Go uppercase (DEBUG, RELEASE...)
  422. STRING(TOUPPER "${CONF}" CONF)
  423. #SET("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CONF}" "${projectOutDir}")
  424. SET("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CONF}" "${projectOutDir}")
  425. ENDFOREACH()
  426. endif()