Cmake 模板和语法

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

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

├── bin
│   └── main
├── build
├── CMakeLists.txt
├── doc
├── README
└── src
    ├── CMakeLists.txt
    ├── libs
    │   ├── hello.cpp
    │   └── hello.h
    ├── main.cpp
    └── modules

根目录下的CMakeLists.txt:

#项目名称
PROJECT(hello)
#声明要求的最小版本
cmake_minimum_required(VERSION 2.6)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")
#添加参与编译的子目录 我理解为:添加下一个CMakeLists.txt
add_subdirectory(src)


src下的

#添加头文件的查找目录 && 在编译参数"-l" ,指定搜索头文件的路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/libs)
SET(SEC_LIST 
    main.cpp
    libs/hello.cpp
)
ADD_EXECUTABLE(main ${SEC_LIST})

#TARGET_LINK_LIBRARIES 用来链接 -l后的文件依赖
#TARGET_LINK_LIBRARIES(CRNode thread)

#EXECUTABLE_OUTPUT_PATH && LIBRARY_OUTPUT_PATH用来指定二进制文件位置和库文件路径,这里不包括中间文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

#关于install 请看http://now-code.com/archives/208

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

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


├── bin
├── build
├── CMakeLists.txt
├── doc
├── README
└── src
    ├── apps
    │   ├── CMakeLists.txt
    │   └── main.cpp
    ├── CMakeLists.txt
    ├── includes
    │   └── hello.h
    ├── libs
    │   ├── CMakeLists.txt
    │   └── hello.cpp
    └── modules
根目录下:

PROJECT(hello)


cmake_minimum_required(VERSION 2.6)


SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")


add_subdirectory(src)


src->apps 下

 

set(myexe_EXEC_SRCS
    main.cpp
    # 其它cpp文件
    )
#一定要包含main.cpp 包含的"*.h"文件
include_directories(
    ${PROJECT_SOURCE_DIR}/src/includes/
    #${PROJECT_BINARY_DIR}/src/libs/
    #${PROJECT_SOURCE_DIR}/src/libs/markup 
    #${PROJECT_SOURCE_DIR}/src/modules/
    #/opt/Ice/include
)
#库文件路径
link_directories(
/usr/local/lib
#$ENV{ORACLE_HOME}/lib
)

#添加自己生成的动态库/静态库 设置目标所需要的链接库
#link_libraries(myexe markup)
link_libraries(main hellolib)

add_executable(main ${myexe_EXEC_SRCS})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/)

#install(TARGETS main RUNTIME DESTINATION bin)



src->libs 的

set(utils_LIB_SRCS
    hello.cpp
    #其它cpp文件
    )

include_directories(
    ${PROJECT_SOURCE_DIR}/src/includes
    #${PROJECT_SOURCE_DIR}/src/libs/markup 
    #${PROJECT_SOURCE_DIR}/src/libs
)

link_directories(
    /usr/local/lib 
    #其它库路径
    )

#link_libraries(utils markup)
#link_libraries(utils uuid)

#生成动态库  静态库则 STATIC
add_library (hellolib SHARED ${utils_LIB_SRCS})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/src/libs/)



如果main.cpp找不到 .h,则可能原因是1:没有包含头文件路径。

有了上述基础,应该可以任意做自己的工程目录并且生成makefile拉。

你可能感兴趣的:(cmake,cmake,cmake,linux快速管理与开发)