cmake编译工程实例http://blog.csdn.net/rjp609206160/article/details/51579909
麻雀虽小,五脏俱全:
工程目录:

下面是具体文件内容:
1、根目录下得CMakeLists.txt


- 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

CMakeLists.txt文件

- add_subdirectory(LOG_C)
- add_subdirectory(LOG_CPP)
- add_subdirectory(LOG_SHARED)
2.1、LOG_C目录,不带头文件的源文件生成静态库

CMakeLists.txt文件

2.1.1、LOG_C的源文件目录

CMakeLists.txt文件

LOG_C.cpp文件

- #include <stdio.h>
- void show()
- {
- printf("Link Lib LOG_C success !\n");
- }
2.2、LOG_CPP目录,带头文件的源文件生成静态库

CMakeLists.txt文件

2.2.1、LOG_CPP的头文件目录

LOG_CPP.h文件

- #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的源文件目录

CMakeLists.txt文件

- include_directories(../include)
- aux_source_directory(. source_list)
- add_library(LOG_CPP ${source_list})
LOG_CPP.cpp文件

- #include "LOG_CPP.h"
- void LOG_CPP::show()
- {
- printf("Link Lib LOG_CPP success !\n");
- }
2.3、LOG_SHARED目录,带头文件的源文件生成动态库

CMakeLists.txt文件

2.3.1、LOG_SHARED的头文件目录

LOG_SHARED.h文件

- #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的源文件目录

CMakeLists.txt文件

- include_directories(../include)
- aux_source_directory(. source_list)
- add_library(LOG_SHARED SHARED ${source_list})
LOG_SHARED.cpp

- #include "LOG_SHARED.h"
- void LOG_SHARED::show()
- {
- printf("Link Lib LOG_SHARED success !\n");
- }
3、工程源文件目录src

CMakeLists.txt文件

- 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
运行结果,这里直接通过脚本顺序执行:
