Cmake 模板和语法

以下文章,来自 http://blog.csdn.net/feibuhui123/article/details/8552719


开始一直犹豫是不是要学cmake对于一个没有项目驱动的人来数,感觉用不用都可以。我大可用一个简单的Makefile模板来做一些简单的工程阿。或者我还可以用autotools等。

不过既然已经看了一个晚上了,还是把它弄懂点吧,记得曾经用过automake,好像没有弄到自己感觉满意就放下了。现在这个cmake好像简单些,借前人的话说就是用CMAKE本身也是在编程。当反复写了几个helloworld的工程(cmake下)后,发现比人工写 makefile要容易,比autoconfig要快些。 自我感觉专业一点,微笑

  1. ├── bin  
  2. │   └── main  
  3. ├── build  
  4. ├── CMakeLists.txt  
  5. ├── doc  
  6. ├── README  
  7. └── src  
  8.     ├── CMakeLists.txt  
  9.     ├── libs  
  10.     │   ├── hello.cpp  
  11.     │   └── hello.h  
  12.     ├── main.cpp  
  13.     └── modules  

根目录下的CMakeLists.txt:
  1. #项目名称  
  2. PROJECT(hello)  
  3. #声明要求的最小版本  
  4. cmake_minimum_required(VERSION 2.6)  
  5.   
  6. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")  
  7. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")  
  8. #添加参与编译的子目录 我理解为:添加下一个CMakeLists.txt  
  9. add_subdirectory(src)  


src下的

  1. #添加头文件的查找目录 && 在编译参数"-l" ,指定搜索头文件的路径  
  2. INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/libs)  
  3. SET(SEC_LIST   
  4.     main.cpp  
  5.     libs/hello.cpp  
  6. )  
  7. ADD_EXECUTABLE(main ${SEC_LIST})  
  8.   
  9. #TARGET_LINK_LIBRARIES 用来链接 -l后的文件依赖  
  10. #TARGET_LINK_LIBRARIES(CRNode thread)  
  11.   
  12. #EXECUTABLE_OUTPUT_PATH && LIBRARY_OUTPUT_PATH用来指定二进制文件位置和库文件路径,这里不包括中间文件  
  13. SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)  
  14.   
  15. #关于install 请看http://now-code.com/archives/208  

这里没有用到静态库和动态库 或是打包.o文件。简单,符合我的水平----不用库。

要专业一点还是写写“库”吧。


  1. ├── bin  
  2. ├── build  
  3. ├── CMakeLists.txt  
  4. ├── doc  
  5. ├── README  
  6. └── src  
  7.     ├── apps  
  8.     │   ├── CMakeLists.txt  
  9.     │   └── main.cpp  
  10.     ├── CMakeLists.txt  
  11.     ├── includes  
  12.     │   └── hello.h  
  13.     ├── libs  
  14.     │   ├── CMakeLists.txt  
  15.     │   └── hello.cpp  
  16.     └── modules  
根目录下:
  1. PROJECT(hello)  
  2.   
  3.   
  4. cmake_minimum_required(VERSION 2.6)  
  5.   
  6.   
  7. SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")  
  8. SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")  
  9.   
  10.   
  11. add_subdirectory(src)  


src->apps 下
  1.    
  2.   
  3. set(myexe_EXEC_SRCS  
  4.     main.cpp  
  5.     # 其它cpp文件  
  6.     )  
  7. #一定要包含main.cpp 包含的"*.h"文件  
  8. include_directories(  
  9.     ${PROJECT_SOURCE_DIR}/src/includes/  
  10.     #${PROJECT_BINARY_DIR}/src/libs/  
  11.     #${PROJECT_SOURCE_DIR}/src/libs/markup   
  12.     #${PROJECT_SOURCE_DIR}/src/modules/  
  13.     #/opt/Ice/include  
  14. )  
  15. #库文件路径  
  16. link_directories(  
  17. /usr/local/lib  
  18. #$ENV{ORACLE_HOME}/lib  
  19. )  
  20.   
  21. #添加自己生成的动态库/静态库 设置目标所需要的链接库  
  22. #link_libraries(myexe markup)  
  23. link_libraries(main hellolib)  
  24.   
  25. add_executable(main ${myexe_EXEC_SRCS})  
  26. set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/)  
  27.   
  28. #install(TARGETS main RUNTIME DESTINATION bin)  



src->libs 的
  1. set(utils_LIB_SRCS  
  2.     hello.cpp  
  3.     #其它cpp文件  
  4.     )  
  5.   
  6. include_directories(  
  7.     ${PROJECT_SOURCE_DIR}/src/includes  
  8.     #${PROJECT_SOURCE_DIR}/src/libs/markup   
  9.     #${PROJECT_SOURCE_DIR}/src/libs  
  10. )  
  11.   
  12. link_directories(  
  13.     /usr/local/lib   
  14.     #其它库路径  
  15.     )  
  16.   
  17. #link_libraries(utils markup)  
  18. #link_libraries(utils uuid)  
  19.   
  20. #生成动态库  静态库则 STATIC  
  21. add_library (hellolib SHARED ${utils_LIB_SRCS})  
  22. set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/src/libs/)  



如果main.cpp找不到 .h,则可能原因是1:没有包含头文件路径。有了上述基础,应该可以任意做自己的工程目录并且生成makefile拉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值