Chinaunix首页 | 论坛 | 博客
  • 博客访问: 370573
  • 博文数量: 100
  • 博客积分: 2500
  • 博客等级: 大尉
  • 技术积分: 1209
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-15 21:24
文章分类

全部博文(100)

文章存档

2011年(100)

分类: LINUX

2011-07-01 13:28:05

1:概述
   有了上一节共享库的工作,这节的就简单多了。

2: 目录结构
  1. [onezeroone@ ex-4]$ tree
  2. .
  3.  build
  4.  CMakeLists.txt
  5.  lib
  6.   CMakeLists.txt
  7.   hello.c
  8.   hello.h
  9.  src
  10.      CMakeLists.txt
  11.      main.c

  12. 3 directories, 6 files

3:文件内容
   这里就不罗嗦了,直接看内容吧,参考前面共享库的制作,需要稍作修改就OK。
  1. [onezeroone@ ex-4]$ cat CMakeLists.txt
  2. PROJECT(EX-4)
  3. ADD_SUBDIRECTORY(lib)
现在是制作静态库时的状态,使用静态库的时候我们需要稍作修改。
  1. [onezeroone@ ex-4]$ cat ./lib/CMakeLists.txt
  2. SET(LIBHELLO_SRC hello.c)
  3. ADD_LIBRARY(hello STATIC ${LIBHELLO_SRC})
  4. INSTALL(TARGETS hello
  5.         ARCHIVE DESTINATION lib)
  6. INSTALL(FILES hello.h DESTINATION include/hello)
需要修改只有2处,STATIC表示要生成静态库,ARCHIVE表示指定静态库的路径。hello文件跟上一节一样。

跟上一节一样,我们cmake一把吧。
  1. [onezeroone@ ex-4]$ cd build/
  2. [onezeroone@ build]$ cmake ..
  3. -- The C compiler identification is GNU
  4. -- The CXX compiler identification is GNU
  5. -- Check for working C compiler: /usr/bin/gcc
  6. -- Check for working C compiler: /usr/bin/gcc -- works
  7. -- Detecting C compiler ABI info
  8. -- Detecting C compiler ABI info - done
  9. -- Check for working CXX compiler: /usr/bin/c++
  10. -- Check for working CXX compiler: /usr/bin/c++ -- works
  11. -- Detecting CXX compiler ABI info
  12. -- Detecting CXX compiler ABI info - done
  13. CMake Warning (dev) in CMakeLists.txt:
  14.   No cmake_minimum_required command is present. A line of code such as

  15.     cmake_minimum_required(VERSION 2.8)

  16.   should be added at the top of the file. The version specified may be lower
  17.   if you wish to support older CMake versions for this project. For more
  18.   information run "cmake --help-policy CMP0000".
  19. This warning is for project developers. Use -Wno-dev to suppress it.

  20. -- Configuring done
  21. -- Generating done
  22. -- Build files have been written to: /home/onezeroone/work/cmake/ex-4/build
  23. [onezeroone@ build]$ make
  24. Scanning dependencies of target hello
  25. [100%] Building C object lib/CMakeFiles/hello.dir/hello.o
  26. Linking C static library libhello.a
  27. [100%] Built target hello
  28. [onezeroone@ build]$ ls ./lib/
  29. CMakeFiles cmake_install.cmake libhello.a Makefile
呵呵,看到我们的静态库了。

4:安装静态库
   安装前我们要制定安装路径,所以我们再重新构建吧。
  1. [onezeroone@ build]$ cmake -DCMAKE_INSTALL_PREFIX=/usr ..
  2. CMake Warning (dev) in CMakeLists.txt:
  3.   No cmake_minimum_required command is present. A line of code such as

  4.     cmake_minimum_required(VERSION 2.8)

  5.   should be added at the top of the file. The version specified may be lower
  6.   if you wish to support older CMake versions for this project. For more
  7.   information run "cmake --help-policy CMP0000".
  8. This warning is for project developers. Use -Wno-dev to suppress it.

  9. -- Configuring done
  10. -- Generating done
  11. -- Build files have been written to: /home/onezeroone/work/cmake/ex-4/build
  12. [onezeroone@ build]$ make
  13. [100%] Built target hello
  14. [onezeroone@ build]$ sudo make install
  15. [100%] Built target hello
  16. Install the project...
  17. -- Install configuration: ""
  18. -- Installing: /usr/lib/libhello.a
  19. -- Up-to-date: /usr/include/hello/hello.h
我们可以看到已经安装到指定的/usr目录下面了。

5:使用静态库
   我们修改工程目录下的CMakeLists.txt文件
  1. [onezeroone@ ex-4]$ cat CMakeLists.txt
  2. PROJECT(EX-4)
  3. ADD_SUBDIRECTORY(src bin)
修改库路径为主程序路径,并指定生成bin文件路径。
  1. [onezeroone@ src]$ cat CMakeLists.txt
  2. ADD_EXECUTABLE(main main.c)
  3. INCLUDE_DIRECTORIES(/usr/include/hello)
  4. TARGET_LINK_LIBRARIES(main libhello.a)
指定静态库文件。

再cmake一把把。
  1. [onezeroone@ build]$ cmake ..
  2. CMake Warning (dev) in CMakeLists.txt:
  3.   No cmake_minimum_required command is present. A line of code such as

  4.     cmake_minimum_required(VERSION 2.8)

  5.   should be added at the top of the file. The version specified may be lower
  6.   if you wish to support older CMake versions for this project. For more
  7.   information run "cmake --help-policy CMP0000".
  8. This warning is for project developers. Use -Wno-dev to suppress it.

  9. -- Configuring done
  10. -- Generating done
  11. -- Build files have been written to: /home/onezeroone/work/cmake/ex-4/build
  12. [onezeroone@ build]$ make
  13. Scanning dependencies of target main
  14. [100%] Building C object bin/CMakeFiles/main.dir/main.o
  15. Linking C executable main
  16. [100%] Built target main
  17. [onezeroone@ build]$ cd bin/
  18. [onezeroone@ bin]$ ls
  19. CMakeFiles cmake_install.cmake main Makefile
  20. [onezeroone@ bin]$ ./main
  21. Hello world
OK我们已经Hello world了,确认下吧。
  1. [onezeroone@ bin]$ ldd main
  2.         linux-gate.so.1 => (0x00e09000)
  3.         libc.so.6 => /lib/libc.so.6 (0x00110000)
  4.         /lib/ld-linux.so.2 (0x0078f000)
不再是上一节的动态库了,OK,Done!

6:注
   这里只是简单的实例了cmake构建静态库,后面我们会逐渐丰富。

阅读(13316) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~