为什么使用cmake其实原有项目直接使用的makefile来做构建的,项目规模的不断扩大,开发模块增加,不能要求所有的开发人员都自己写makefile,模板的方式解决了一部分问题,但是比较麻烦,考虑采用automake的方式来做,但是最大的问题是在构建时代码出现错误的位置从输出中查找比较困难,而cmake提供了高亮的功能,这恰是我最需要的。
cmake根目录CMakeLists.txt:
project(fep)
cmake_minimum_required(VERSION 2.6)
set(PRO_DIR ${PROJECT_SOURCE_DIR}/../../)
set(LIBRARY_OUTPUT_PATH ${PRO_DIR}/lib/fep)
set(EXECUTABLE_OUTPUT_PATH ${PRO_DIR}/bin/fep)
include_directories(platform/include)
add_subdirectory(platform)
add_subdirectory(test)
find_library(pla platform ../../../lib/fep)
find_package(CppUnit)
include_directories(${CPPUNIT_INCLUDE_DIR})
add_executable(test test.cpp TestMain.cpp BaseTest.cpp)
#find_package(Qt4)
#include(${QT_USE_FILE})
target_link_libraries(test dl)
target_link_libraries(test platform)
target_link_libraries(test ${CPPUNIT_LIBRARIES})
target_link_libraries(test event)
target_link_libraries(test pthread)
#target_link_libraries(test ${QT_LIBRARIES})
其中CppUnit的支持是后来添加的插件。
test目录下CMakeLists.txt:
project(boosttest)
cmake_minimum_required(VERSION 2.6)
set(CMAKE_BUILD_TYPE debug)
add_executable(baseserver baseserver.cpp error_code.cpp)
target_link_libraries(baseserver pthread)
target_link_libraries(baseserver rt)
target_link_libraries(baseserver aio)
platform目录下CMakeLists.txt,这是用来生成so的:
aux_source_directory(cpp src)
aux_source_directory(exception src)
include_directories(include)
add_library(platform SHARED ${src})
构建过程很简单:cmake .;make