cmake学习
1、一个简单的cmakelist:
project(LeetCode)
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage -lgcov")
file(GLOB_RECURSE SRC_FILES
${CMAKE_CURRENT_LIST_DIR}/lib/*/*.c
${CMAKE_CURRENT_LIST_DIR}/lib/*/*.cc
${CMAKE_CURRENT_LIST_DIR}/lib/*/*.cpp
${CMAKE_CURRENT_LIST_DIR}/lib/*/*.h
${CMAKE_CURRENT_LIST_DIR}/lib/src/*.c
${CMAKE_CURRENT_LIST_DIR}/lib/src/*.cc
${CMAKE_CURRENT_LIST_DIR}/lib/src/*.cpp
${CMAKE_CURRENT_LIST_DIR}/lib/include/*.h
)
#添加头文件搜索路径,包头文件时方便
include_directories(
${CMAKE_CURRENT_LIST_DIR}/lib/include/
)
#生成库文件
add_library(static_${PROJECT_NAME} ${SRC_FILES} )
file(GLOB_RECURSE EXE_SRC_FILES
${CMAKE_CURRENT_LIST_DIR}/exe/src/*.c
${CMAKE_CURRENT_LIST_DIR}/exe/src/*.cc
${CMAKE_CURRENT_LIST_DIR}/exe/src/*.cpp
${CMAKE_CURRENT_LIST_DIR}/exe/include/*.h
)
#生成可执行文件
add_executable(${PROJECT_NAME} ${EXE_SRC_FILES})
#规定生成的依赖关系
add_dependencies(${PROJECT_NAME} static_${PROJECT_NAME})
#链接库文件,link_libraries用在add_executable之前,target_link_libraries用在add_executable之后
target_link_libraries(${PROJECT_NAME} static_${PROJECT_NAME})
if(UNIX)
target_link_libraries(${PROJECT_NAME} pthread)
endif()
set(PKG_GTEST gtest)
#获取完整的文件名
get_filename_component(PKG_GTEST_DIR "${CMAKE_CURRENT_LIST_DIR}/3rdparty/gtest-1.7.0" ABSOLUTE CACHE)
get_filename_component(PKG_GTEST_INCLUDE_DIR "${PKG_GTEST_DIR}/include" ABSOLUTE CACHE)
#把一个项目分割成几个范围有限的CMakeLists.txt文件,这些文件将使用add_subdirectory命令进行处理。分模块处理!!
add_subdirectory(${PKG_GTEST_DIR} ${CMAKE_CURRENT_BINARY_DIR}/${PKG_GTEST})
file(GLOB_RECURSE TEST_SRC_FILES
${CMAKE_CURRENT_LIST_DIR}/test/ft/*.c
${CMAKE_CURRENT_LIST_DIR}/test/ft/*.cc
${CMAKE_CURRENT_LIST_DIR}/test/ft/*.cpp
${CMAKE_CURRENT_LIST_DIR}/test/ft/*.h
${CMAKE_CURRENT_LIST_DIR}/test/src/*.c
${CMAKE_CURRENT_LIST_DIR}/test/src/*.cc
${CMAKE_CURRENT_LIST_DIR}/test/src/*.cpp
${CMAKE_CURRENT_LIST_DIR}/test/include/*.h
)
include_directories(
${CMAKE_CURRENT_LIST_DIR}/test/*/
${PKG_GTEST_INCLUDE_DIR}
)
add_executable(test_${PROJECT_NAME} ${TEST_SRC_FILES})
add_dependencies(test_${PROJECT_NAME} static_${PROJECT_NAME} ${PKG_GTEST})
target_link_libraries(test_${PROJECT_NAME} static_${PROJECT_NAME} ${PKG_GTEST})
if(UNIX)
target_link_libraries(test_${PROJECT_NAME} pthread)
endif()
#为当前及其下级目录打开测试功能??不懂具体含义
enable_testing()
add_custom_target(build_and_test
${CMAKE_CTEST_COMMAND} -V -C Debug
)
add_test(NAME ${PROJECT_NAME}
COMMAND test_${PROJECT_NAME}
)
add_dependencies(build_and_test test_${PROJECT_NAME} ${PROJECT_NAME})
2、目录架构:
3、


浙公网安备 33010602011771号