cmake_minimum_required(VERSION 2.8.11)
project(XXX)
# 搜索目标文件夹文件列表
file(GLOB SRC ${CMAKE_CURRENT_LIST_DIR}/src/*)
# CMAKE_CURRENT_LIST_DIR CMAKE文件(CMakeLists.txt和.cmake)所在目录
# CMAKE_CURRENT_BINRARY_DIR # cmake 工程构建目录; 如果有add_subdirectory subdir 目录下的CMakeLists.txt 中 CMAKE_CURRENT_BINRARY_DIR 会引用到构建根目录的相对路径。
add_executable(XXX $(SRC))
sample CMakeLists.txt
windows vs 默认构建的exe是md 模式的运行需要一堆的运行库dll,很是麻烦,改成MT,运行库的相关函数连接到exe内部,可以复制到没有安装运行库的环境中运行。
mt.cmake
if(MSVC)
option(BUILD_WITH_MT " Disable IMP lib" ON)
if(BUILD_WITH_MT)
set(CompilerFlags
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS_DEBUG
CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL
CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS
CMAKE_C_FLAGS_DEBUG
CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL
CMAKE_C_FLAGS_RELWITHDEBINFO
)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/Ob0" "" ${CompilerFlag} "${${CompilerFlag}}")
string(REPLACE "/TC" "" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
endif(BUILD_WITH_MT)
endif(MSVC)
同时构建第三方开源库的办法,现在开发程序,总是需要引用一些第三方开源库,不建议重复造轮子。以下是一个同时构建zlib的例子。缺点是编译时间比较久。
zip.cmake
include (ExternalProject)
set(ZLIB_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/buildtrees/zlib)
set(ZLIB_URL ${CMAKE_CURRENT_LIST_DIR}/../third_party/zlib1211.tar.gz)
set(ZLIB_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/packages/zlib)
ExternalProject_Add(zlib
PREFIX ${ZLIB_PREFIX}
URL ${ZLIB_URL}
CMAKE_CACHE_ARGS
-DENABLE_SHARED:BOOL=OFF
-DENABLE_STATIC:BOOL=ON
-DWITH_SIMD:BOOL=ON
-DWITH_TURBOJPEG:BOOL=ON
-DWITH_JPEG8:BOOL=OFF
-DWITH_CRT_DLL:BOOL=OFF
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_INSTALL_PREFIX:STRING=${ZLIB_INSTALL}
-DCMAKE_TOOLCHAIN_FILE:STRING=${CMAKE_TOOLCHAIN_FILE}
)
include_directories(${ZLIB_INSTALL}/include)
link_directories(${ZLIB_INSTALL}/lib)
set(ZLIB_LIBRARIES
${ZLIB_INSTALL}/lib/zlibstaticd.lib
)