[cmake] 使用静态库archive文件

来源:互联网 发布:西地那非粉50克淘宝 编辑:程序博客网 时间:2024/06/15 13:19

上一篇文章中,我们制作了一个archive文件,那接下来就是如何使用它了。首先来看一下程序的目录结构

t2├── build├── CMakeLists.txt└── src    ├── CMakeLists.txt    └── main.c

最外层的CMakeLists.txt中内容为

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(MA52103231)CMAKE_POLICY(SET CMP0002 OLD)#CMP0002 OLD的概念见下文CMAKE_POLICY(SET CMP0015 NEW)#CMP0015 NEW的概念见下文ADD_SUBDIRECTORY(src construct)
依然如此简单,清晰
src/CMakeLists.txt中的内容为

AUX_SOURCE_DIRECTORY(. all_sources)#将当前目录(.)下的所有源文件(*.c *.cpp)加入到变量all_sources中ADD_EXECUTABLE(myexpect ${all_sources})#声明要用所有的源文件生成一个可执行程序myexpectINCLUDE_DIRECTORIES(../../t1/build/include)#定义了源文件中要使用的某些h文件的所在路径,这个路径使用了当前目录的前缀,                                           #而当前目录就是当前CMakeLists.txt所在目录LINK_DIRECTORIES(../../t1/build/libstatic)#这个其实也是使用了当前目录的概念,不过需要使用CMP0015 NEW这个规则,否则,我还真找不到当前目录是哪个TARGET_LINK_LIBRARIES(myexpect core)#定义我们的可执行程序要链接的库,此处是core(默认是动态库,不过目标文件里面只有静态库,所以就链接静态库了,假设                                    #动态库和静态库都存在,那就指定具体的名字,比如libcore.a 或者 libcore.so)ADD_EXECUTABLE(myexpect ${all_sources})#此处再次使用了这句话,是为了解决cmake的一个问题(没有这句的LINK_DIRECTORIES这句话会不起作用)。同时,如果不用时                                       #规则CMP0002 OLD的话,在build目录执行cmkae ..时会因为有两句同样的ADD_EXECUTABLE而停止工作 
main.c中的内容

#include <core.h>int main(int argc, char** argv){core_help();return 0;}
很简单

在build目录执行cmake .. 后再执行make,build目录会生成如下文件

CMakeCache.txt  CMakeFiles  cmake_install.cmake  construct  Makefile
我们的可执行程序就在construct目录中了

CMakeFiles  cmake_install.cmake  Makefile  myexpect
执行它得到

root@hu-virtual-machine:/home/hu/project/test_cmake/t2/build/construct# ./myexpect my help




原创粉丝点击