使⽤cmake编译,组织C++项⽬⽂章⽬录
前⾔
这篇博客是我对cmake⽤法的⼀些经验总结, 还很浅显, 如果有错误或者更好的⽅案, 欢迎指正~使⽤⽅法统⼀为在build⽬录中执⾏:
$: cmake ..
$: make
我觉得养成外部编译是⼀个好习惯
例⼀
⽬录结构为:
lzj@lzj:~/C-Plus-Plus/makefile_cmake/cmake_1$ tree
.
├── build
为什么现在都用cmake
├──
└── src
├── hello
│├──
│└── hello.h
├── main.cpp
└── world
├──
└── world.h
src ⽬录中不同属性类维护在不同⽬录中
main.cpp中使⽤hello.h和world.h
<为 :
cmake_minimum_required (VERSION 3.0)
project (test_1)
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/hello SOURCE_HELLO)
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/world SOURCE_WORLD)
add_definitions("-g -Wall -std=c++11")
add_executable(main
${CMAKE_CURRENT_LIST_DIR}/src/main.cpp
${SOURCE_HELLO}
${SOURCE_WORLD})
例⼆
⽬录结构为:
lzj@lzj:~/C-Plus-Plus/makefile_cmake/cmake_2$ tree
.
├── build
├──
├── include
│└── person.h
└── src
├── main.cpp
└──
include⽬录下统⼀包含头⽂件和宏定义之类, 源⽂件放在 src ⽬录下维护
person 类是⼀个简单的空类, 拥有⼀个私有成员变量val, ⼀个公有成员函数来打印该变量, 在main.cpp中调⽤
<为 :
cmake_minimum_required(VERSION 3.0)
project(test_2)
include_directories(${PROJECT_SOURCE_DIR}/include)
add_definitions("-g -Wall -std=c++11")
add_executable(main
${PROJECT_SOURCE_DIR}/src/main.cpp #这个路径看这个main.cpp位于哪⾥了
${PROJECT_SOURCE_DIR}/)
-----update:
在多线程的代码上使⽤我上⾯的CMakeLists发现有问题,add_definitions发现并不能这么⽤,正确⽤法后⾯再学习吧, 在⼀⼈的上看到⼀更正确的, 如下
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #设定最⼩版本号
PROJECT( test ) #设定⼯程名
SET(CMAKE_CXX_COMPILER "g++") #设置编译器(可选的有gcc,g++)
# 设置⽤debug还是release模式。debug允许断点,⽽release更快
#set( CMAKE_BUILD_TYPE Debug )
set( CMAKE_BUILD_TYPE Release )
`就是这⾥,多线程的编译标志,即编译选项应该这么⽤`
# 设置编译选项
# 允许c++11标准、O3优化、多线程。match选项可避免⼀些cpu上的问题
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" )
#设定可执⾏⼆进制⽂件的⽬录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#设定存放编译出来的库⽂件的⽬录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#并且把该⽬录设为连接⽬录
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
#设定头⽂件⽬录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#增加⼦⽂件夹(注意我们的src路径是通过⼦⽂件夹的形式添加的,在这⾥⾯也是可以些的)
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
例三
⽬录结构为:
lzj@lzj:~/C-Plus-Plus/makefile_cmake/cmake_3$ tree
.
├── build
├──
├── main.cpp
└── src
├──
├──
├── hello.h
├──
└── world.h
将编写的代码编译为库, 在main.cpp中使⽤, 编译main.cpp时链接该库
顶层⽬录中为:
cmake_minimum_required (VERSION 3.0)
project (test_3)
add_subdirectory(src)
add_definitions("-g -Wall -std=c++11")
add_executable(main main.cpp)
target_link_libraries(main TEST3) #⾃⼰的库名为TEST3
⼦⽬录 src 中的为:
aux_source_directory(. DIR_LIB_SRCS)
add_library (TEST3 ${DIR_LIB_SRCS})
当然如果src⽬录下为多⽂件时, 每个⽬录下都要添加该语句的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论