cmake编译工程实例http://blog.csdn.net/rjp609206160/article/details/51579909
麻雀虽小,五脏俱全:
工程目录:
![](https://img-blog.csdn.net/20160603144856047)
下面是具体文件内容:
1、根目录下得CMakeLists.txt
![](https://img-blog.csdn.net/20160603144744530)
![](https://img-blog.csdn.net/20160603145252876)
- cmake_minimum_required(VERSION 2.5)
- project(MyTest)
- set(top_dir ${PROJECT_SOURCE_DIR})
- set(head_dir ${top_dir}/include)
- set(source_dir ${top_dir}/src)
- set(lib_dir ${top_dir}/lib)
- set(EXECUTABLE_OUTPUT_PATH ${top_dir}/bin)
- set(LIBRARY_OUTPUT_PATH ${top_dir}/lib)
- link_directories(${lib_dir})
- add_subdirectory(src)
- add_subdirectory(lib)
2、库目录lib
![](https://img-blog.csdn.net/20160603150731006)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603150300112)
- add_subdirectory(LOG_C)
- add_subdirectory(LOG_CPP)
- add_subdirectory(LOG_SHARED)
2.1、LOG_C目录,不带头文件的源文件生成静态库
![](https://img-blog.csdn.net/20160603150920991)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603151141649)
2.1.1、LOG_C的源文件目录
![](https://img-blog.csdn.net/20160603151411149)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603151555863)
LOG_C.cpp文件
![](https://img-blog.csdn.net/20160603151712724)
- #include <stdio.h>
- void show()
- {
- printf("Link Lib LOG_C success !\n");
- }
2.2、LOG_CPP目录,带头文件的源文件生成静态库
![](https://img-blog.csdn.net/20160603152052980)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603151141649)
2.2.1、LOG_CPP的头文件目录
![](https://img-blog.csdn.net/20160603152334889)
LOG_CPP.h文件
![](https://img-blog.csdn.net/20160603152507685)
- #ifndef __LOG_CPP__H__
- #define __LOG_CPP__H__
-
- #include <stdio.h>
- class LOG_CPP
- {
- public:
- void show();
- };
-
- #endif//__LOG_CPP__H__
2.2.2、LOG_CPP的源文件目录
![](https://img-blog.csdn.net/20160603152758202)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603152901765)
- include_directories(../include)
- aux_source_directory(. source_list)
- add_library(LOG_CPP ${source_list})
LOG_CPP.cpp文件
![](https://img-blog.csdn.net/20160603153118875)
- #include "LOG_CPP.h"
- void LOG_CPP::show()
- {
- printf("Link Lib LOG_CPP success !\n");
- }
2.3、LOG_SHARED目录,带头文件的源文件生成动态库
![](https://img-blog.csdn.net/20160603153500486)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603151141649)
2.3.1、LOG_SHARED的头文件目录
![](https://img-blog.csdn.net/20160603153738548)
LOG_SHARED.h文件
![](https://img-blog.csdn.net/20160603154129461)
- #ifndef __LOG_SHARED__H__
- #define __LOG_SHARED__H__
-
- #include <stdio.h>
- class LOG_SHARED
- {
- public:
- void show();
- };
-
- #endif//__LOG_SHARED__H__
2.3.2、LOG_SHARED的源文件目录
![](https://img-blog.csdn.net/20160603154457021)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603154605974)
- include_directories(../include)
- aux_source_directory(. source_list)
- add_library(LOG_SHARED SHARED ${source_list})
LOG_SHARED.cpp
![](https://img-blog.csdn.net/20160603154756844)
- #include "LOG_SHARED.h"
- void LOG_SHARED::show()
- {
- printf("Link Lib LOG_SHARED success !\n");
- }
3、工程源文件目录src
![](https://img-blog.csdn.net/20160603161729566)
CMakeLists.txt文件
![](https://img-blog.csdn.net/20160603161923551)
- set(targetName Test)
- aux_source_directory(${source_dir} source_list)
- add_executable(${targetName} ${source_list})
- include_directories(${head_dir})
- include_directories(${lib_dir}/LOG_CPP/include)
- include_directories(${lib_dir}/LOG_SHARED/include)
- target_link_libraries(${targetName} LOG_C LOG_CPP LOG_SHARED)
- #include "CTest.h"
- void CTest::show()
- {
- printf("Test is running ......\n");
- }
- #include "CTest.h"
- #include "LOG_CPP.h"
- #include "LOG_SHARED.h"
- extern void show();
- int main()
- {
- CTest test;
- test.show();
-
- show();
-
- LOG_CPP log1;
- log1.show();
-
- LOG_SHARED log2;
- log2.show();
-
- return 0;
- }
4、最后进入build目录,运行命令:
cmake ..
make
./bin/Test
运行结果,这里直接通过脚本顺序执行:
![](https://img-blog.csdn.net/20160603163644737)