cmake_minimum_required (VERSION 2.6) project (MCADefrag) macro(add_flags_cxx FLAGS) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${FLAGS}") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${FLAGS}") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${FLAGS}") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${FLAGS}") endmacro() # Add the preprocessor macros used for distinguishing between debug and release builds (CMake does this automatically for MSVC): if (NOT MSVC) set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG") set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -D_DEBUG") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -DNDEBUG") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -DNDEBUG") endif() if(MSVC) # Make build use multiple threads under MSVC: add_flags_cxx("/MP") # Make release builds use link-time code generation: set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL") set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /GL") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE} /LTCG") set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS_RELEASE} /LTCG") elseif(APPLE) #on os x clang adds pthread for us but we need to add it for gcc if (NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") add_flags_cxx("-pthread") endif() else() # Let gcc / clang know that we're compiling a multi-threaded app: add_flags_cxx("-pthread") endif() # Use static CRT in MSVC builds: if (MSVC) string(REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") string(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") string(REPLACE "/MDd" "/MTd" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") string(REPLACE "/MDd" "/MTd" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") endif() # Set include paths to the used libraries: include_directories("../../lib") include_directories("../../src") function(flatten_files arg1) set(res "") foreach(f ${${arg1}}) get_filename_component(f ${f} ABSOLUTE) list(APPEND res ${f}) endforeach() set(${arg1} "${res}" PARENT_SCOPE) endfunction() # Include the libraries: file(GLOB ZLIB_SRC "../../lib/zlib/*.c") file(GLOB ZLIB_HDR "../../lib/zlib/*.h") flatten_files(ZLIB_SRC) flatten_files(ZLIB_HDR) source_group("ZLib" FILES ${ZLIB_SRC} ${ZLIB_HDR}) # Include the shared files: set(SHARED_SRC ../../src/StringCompression.cpp ../../src/StringUtils.cpp ../../src/Log.cpp ../../src/MCLogger.cpp ) set(SHARED_HDR ../../src/ByteBuffer.h ../../src/StringUtils.h ../../src/Log.h ../../src/MCLogger.h ) set(SHARED_OSS_SRC ../../src/OSSupport/CriticalSection.cpp ../../src/OSSupport/File.cpp ../../src/OSSupport/IsThread.cpp ../../src/OSSupport/Timer.cpp ) set(SHARED_OSS_HDR ../../src/OSSupport/CriticalSection.h ../../src/OSSupport/File.h ../../src/OSSupport/IsThread.h ../../src/OSSupport/Timer.h ) flatten_files(SHARED_SRC) flatten_files(SHARED_HDR) flatten_files(SHARED_OSS_SRC) flatten_files(SHARED_OSS_HDR) source_group("Shared" FILES ${SHARED_SRC} ${SHARED_HDR}) source_group("Shared\\OSSupport" FILES ${SHARED_OSS_SRC} ${SHARED_OSS_HDR}) # Include the main source files: set(SOURCES MCADefrag.cpp Globals.cpp ) set(HEADERS MCADefrag.h Globals.h ) source_group("" FILES ${SOURCES} ${HEADERS}) add_executable(MCADefrag ${SOURCES} ${HEADERS} ${SHARED_SRC} ${SHARED_HDR} ${SHARED_OSS_SRC} ${SHARED_OSS_HDR} ${ZLIB_SRC} ${ZLIB_HDR} )