CMAKE 的一些命令
http://www.cnblogs.com/coderfenghc/archive/2012/10/20/2712806.html
假设有一个TestHttpClient Solution,这个Solution下分别有TestHttpClient工程(可执行程序)和HttpClient工程(动态库)。
这样我们需要三个CMakeLists.txt文件。其中HttpClient还依赖了libcurl第三方库。
下面分别是不同目录下的CMakeLists.txt文件清单
Solution目录
- PROJECT(TestHttpClient)
-
- CMAKE_MINIMUM_REQUIRED(VERSION
2.8) -
- #要显示执行构建过程中详细的信息(比如为了得到更详细的出错信息)
- SET(
CMAKE_VERBOSE_MAKEFILE ON ) -
- #添加子目录
- ADD_SUBDIRECTORY(HttpClient)
- ADD_SUBDIRECTORY(TestHttpClient)
HttpClient目录
- MESSAGE(STATUS
"This is TestHttpClient_SOURCE_DIR="${TestHttpClient_SOURCE_DIR}) - MESSAGE(STATUS
"This is CMAKE_SOURCE_DIR="${CMAKE_SOURCE_DIR}) - #添加头文件搜索路径
- INCLUDE_DIRECTORIES(${TestHttpClient_SOURCE_DIR}/HttpClient)
-
- #用于将当前目录下的所有源文件的名字保存在变量
LIB1_SRCS 中 - AUX_SOURCE_DIRECTORY(.
LIB_SRC) -
- #把编译出来的库文件输出到项目的lib目录下
- #例如运行“cmake
..”的目录为build,则在build/lib目录下生成 - SET(LIBRARY_OUTPUT_PATH
${PROJECT_BINARY_DIR}/lib) -
- #output
library name is libHttpClient.so - ADD_LIBRARY(HttpClient
SHARED ${LIB_SRC}) -
- #查找libcurl依赖,如果没有找到则终止cmake继续运行,否则链接目标文件。
- #输出FATAL_ERROR级别信息,会终止cmake。
- #在CentOS6.5下使用“sudo
yum install curl-devel”命令安装curl-dev依赖包即可 - FIND_PACKAGE(CURL)
- IF(CURL_FOUND)
-
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR}) -
TARGET_LINK_LIBRARIES(HttpClient ${CURL_LIBRARY}) - ELSE(CURL_FOUND)
-
MESSAGE(FATAL_ERROR "CURL library not found") - ENDIF(CURL_FOUND)
TestHttpClient目录
- #把编译出来的可执行文件输出到项目的bin目录下
- #例如运行“cmake
..”的目录为build,则在build/bin目录下生成 - SET(EXECUTABLE_OUTPUT_PATH
${PROJECT_BINARY_DIR}/bin) -
- #CMake运行时,打印路径
- MESSAGE(${PROJECT_SOURCE_DIR}/HttpClient)
-
- #添加库文件搜索路径
- LINK_DIRECTORIES(${PROJECT_BINARY_DIR}/lib)
-
- #用于将当前目录下的所有源文件的名字保存在变量
APP_SRCS 中 - AUX_SOURCE_DIRECTORY(.
APP_SRC) -
- #如果调用"CMake
-D DEBUG_MODE=ON .." - #则为源文件设置_DEBUG宏
- IF(DEBUG_MODE)
-
ADD_DEFINITIONS(-D_DEBUG) - ENDIF()
-
- #用于指定从一组源文件
source1 source2 … sourceN(在变量APP_SRCS中定义) - #编译出一个可执行文件且命名为TestHttpClient
- ADD_EXECUTABLE(TestHttpClient
${APP_SRC}) -
- #添加编译可执行程序所需要的链接库、如果有多个中间用空格隔开
- #第一个参数是可执行程序名称,第二个开始是依赖库
- #在这里根据名字XXX去寻找libXXX.a文件
- TARGET_LINK_LIBRARIES(TestHttpClient
HttpClient)