目录结构如下:
lqd@ubuntu:~/lqd/cmake/test$ tree
.
├── build
├── CMakeLists.txt
├── config
│ └── config.h.in
├── inc
├── lib
│ ├── CMakeLists.txt
│ ├── sum.c
│ └── sum.h
└── src
├── CMakeLists.txt
└── main.c
5 directories, 7 files
目标:
config.h.in里面定义了一些宏定义,我们将config.h.in配置文件生成头文件,供源码使用
~/lqd/cmake/test/CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
PROJECT(demo1)
ADD_SUBDIRECTORY(./lib)
ADD_SUBDIRECTORY(./src)
#ADD_EXECUTABLE(main main.c)
~/lqd/cmake/test/config/config.h.in
#cmakedefine USE_MY_DEFINE
~/lqd/cmake/test/lib/CMakeLists.txt
#CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
#PROJECT_BINARY_DIR 永远执行cmake命令执行的目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/out/lib)
aux_source_directory(./ DIR_LIB_SRCS)
#add_library(sum SHARED ${DIR_LIB_SRCS})
add_library(sum STATIC ${DIR_LIB_SRCS})
~/lqd/cmake/test/lib/sum.c
#include "sum.h"
int sum(int a, int b)
{
int sum;
sum = a + b;
return sum;
}
~/lqd/cmake/test/lib/sum.h
#ifndef _SUM_H_
#define _SUM_H_
int sum(int a, int b);
#endif
~/lqd/cmake/test/src/CMakeLists.txt
#PROJECT_SOURCE_DIR 永远指向最顶层CMakeLists.txt的目录
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/out/bin)
#将 config.h.in 配置文件生成 test.h 头文件
CONFIGURE_FILE(
"${PROJECT_SOURCE_DIR}/config/config.h.in"
"${PROJECT_SOURCE_DIR}/config/test.h"
)
#添加 USE_MY_DEFINE 配置属性
OPTION(USE_MY_DEFINE
ON
)
#宏控判断
IF(USE_MY_DEFINE)
#这个判断里面什么都没有做
ENDIF(USE_MY_DEFINE)
#包含config.h 头文件路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/config)
aux_source_directory(./ DIR_LIB_SRCS)
ADD_EXECUTABLE(main ${DIR_LIB_SRCS})
TARGET_LINK_LIBRARIES(main sum)
~/lqd/cmake/test/src/main.c
#include <stdio.h>
#include "sum.h"
#include "test.h"
int main(int argc, char *argv[])
{
int result = 0;
printf("Hello worlod.\n");
result = sum(1, 2);
printf("result=%d \n", result);
#ifdef USE_MY_DEFINE
printf("Define USE_MY_DEFINE.\n");
#else
printf("Don't define USE_MY_DEFINE.\n");
#endif
return 0;
}
使用方法;
进入build目录,执行命令:ccmake ..
进入到选择终端里面后,按c开始导入配置
导入配置完成后,再按c,进入配置配置。
通过上下切换行,通过enter切换状态
配置完成后,再按c完成配置,然后再按g,退出并生成相应的配置文件
然后执行命令:make
这个时候,所有的库和程序就都生成好了。