以下文章,来自 http://blog.csdn.net/feibuhui123/article/details/8552719
开始一直犹豫是不是要学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)
- 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/)