cmake入门实战基础

项目实例目录结构:主要实现了包含了项目内部生成的库,同时又依赖了外部三方的库。

├── 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
  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 }

 

你可能感兴趣的:(开发工具)