项目实例目录结构:主要实现了包含了项目内部生成的库,同时又依赖了外部三方的库。
├── bin
│ └── demo_cmake
├── build
├── CMakeLists.txt
├── inc
│ └── MathCommon.h
├── lib
│ ├── libMathCommon.so
│ └── libMathFunctions.a
├── lib_extern
│ ├── build
│ ├── CMakeLists.txt
│ ├── MathCommon.cpp
│ └── MathCommon.h
├── lib_inner
│ ├── CMakeLists.txt
│ ├── MathFunctions.cpp
│ └── MathFunctions.h
├── main.cpp
├── Untils.cpp
└── Untils.h
主目录下的CMakeLists.txt内容:
#cmake最低版本要求
cmake_minimum_required(VERSION 2.8)
#项目名称
project(demo_cmake)
#项目默认的执行文件目录和源代码目录
message(STATUS ${CMAKE_BINARY_DIR})
message(STATUS ${CMAKE_SOURCE_DIR})
message(STATUS ${PROJECT_BINARY_DIR})
message(STATUS ${PROJECT_SOURCE_DIR})
#set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
#set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
#设置库输出目录
set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib)
#设置可执行文件输出目录
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
#头文件目录
#指定头文件的搜索路径,相当于指定gcc的-I参数
include_directories(${CMAKE_SOURCE_DIR}/inc)
#链接库目录
#动态链接库或静态链接库的搜索路径,相当于gcc的-L参数
link_directories(${CMAKE_SOURCE_DIR}/lib)
#查找目录下所有的源文件并保存在变量SRC_DIR中
aux_source_directory(. SRC_DIR)
message(STATUS ${SRC_DIR})
#包含子目录
add_subdirectory(lib_inner)
#编译可执行程序
#add_executable(demo main.cpp Common.cpp)
add_executable(demo_cmake ${SRC_DIR})
#添加链接库,相同于指定-l参数
target_link_libraries(demo_cmake MathFunctions MathCommon)
项目内部生成库CMakeLists.txt:
aux_source_directory(. LIB_SRC_DIR)
add_library(MathFunctions STATIC ${LIB_SRC_DIR})
#add_library(MathFunctions SHARED ${LIB_SRC_DIR})
项目外部生成库CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SO_EXTERN_DIR)
add_library(MathCommon SHARED ${SO_EXTERN_DIR})
主目录main函数代码:
1 #include<stdio.h>
2
3 #include"Untils.h"
4
5 #include"lib_inner/MathFunctions.h"
6
7 #include"MathCommon.h"
8
9 int main()
10 {
11 printf("this is a cmake demo test.\n");
12
13 printf_extern_lib();
14
15 printf_inner_lib();
16
17 printf_untils();
18
19 return 0;
20 }