菜鸟笔记
提升您的技术认知

cmake知识点总结-ag真人游戏

  cmake的所有的语句都写在一个叫 cmakelists.txt 的文件中。当 cmakelists.txt 文件确定后,可以用 ccmake 命令对相关的变量值进行配置。这个命令必须指向 cmakelists.txt 所在的目录。配置完成之后,应用 cmake 命令生成相应的 makefile。

一、项目的目录结构

  • src:源文件
  • inc:头文件
  • test:测试文件,主函数入口
  • proto:proto文件
  • log:项目产生的日志文件
  • build:在此文件夹中构建项目,不污染源文件
  • bin:生成的可执行文件
  • build.sh:cmake的脚本

二、实例说明cmake编写规则

  src文件下的cmakelists.txt

# 指定cmake编译最低要求版本
cmake_minimum_required(version 2.8)
# 将c  文件赋值给变量src_list_server
set(src_list_server 
    chatserver.cpp 
    chatsystem.pb.cc 
    chatstatus.pb.cc 
    mysql.cpp 
    redis.cpp
)
set(src_list_client 
    chatclient.cpp 
    chatsystem.pb.cc 
    chatstatus.pb.cc 
    mysql.cpp 
    redis.cpp
)
# 设置编译选项
set(cmake_cxx_flags "${cmake_cxx_flags} -std=c  11 -lpthread -g -wall")
# 查找protobuf头文件
# find_package(protobuf required)
# if(protobuf_found)
#   message(status "protobuf library found")
# else()
#    message(fatal_error "protobuf library is needed but cant be found")
# endif()
#include_directories(${protobuf_include_dirs})
# 指定头文件和库文件目录
include_directories(${project_source_dir}/inc)
# 指定生成库文件的目录
set(library_output_path ${project_source_dir}/lib)
include_directories(/usr/local/include/google/protobuf)
include_directories(/usr/local/boost/include)
include_directories(/usr/include/mysql)
include_directories(/usr/local/include/hiredis)
include_directories(/usr/local/include/glog)
link_directories(/usr/local/boost/lib)
# 生成库文件,默认生成静态库,shared指定生成库类型为动态库
add_library(chatserver shared ${src_list_server})
add_library(chatclient shared ${src_list_client})
# 需要链接的库文件
target_link_libraries(chatserver
                      protobuf
                      hiredis
                      mysqlclient
                      glog
)
target_link_libraries(chatclient
                      protobuf
                      hiredis
                      mysqlclient
                      glog
)

  test文件下的cmakelists.txt

# 指定cmake编译最低要求版本
cmake_minimum_required(version 2.8)
# 将server.cpp赋值给server变量
set(server server.cpp)
set(client client.cpp)
# 设置编译选项
set(cmake_cxx_flags "${cmake_cxx_flags} -std=c  11 -lpthread -g -wall")
# 设置生成的执行文件的输出目录
set(executable_output_path ${project_source_dir}/bin)
link_directories(${project_source_dir}/lib)
include_directories(/usr/local/include/google/protobuf)
include_directories(/usr/local/boost/include)
include_directories(/usr/include/mysql)
include_directories(/usr/local/include/hiredis)
include_directories(/usr/local/include/glog)
link_directories(/usr/local/boost/lib)
# 生成可执行文件server,依赖于server.cpp
add_executable(server ${server})
add_executable(client ${client})
# 指定server的链接库chatserver和protobuf
target_link_libraries(server chatserver)
target_link_libraries(client chatclient)

【指令说明】:

  • cmake_minimum_required:声明cmake版本,如果低于指定版本则会停止处理工程文件,并报告错误。
  • set:定义变量并赋值。
  • cmake_cxx_flags:设置编译选项。
  • project_source_dir:预定义的变量。
  • ${}:取值。
  • include_directories:向工程添加多个特定的头文件搜索路径,路径之间用空格分隔。
  • link_directories:添加非标准的共享库搜索路径。
  • add_library:生成动态库或静态库。
  • target_link_libraries:为target添加需要链接的共享库。
  • add_executable:生成可执行文件。

【运行说明】:

#!bin/bash
protoc -i=./proto/ --cpp_out=./proto ./proto/chatsystem.proto
mv ./proto/chatsystem.pb.h ./inc/chatsystem.pb.h
mv ./proto/chatsystem.pb.cc ./src/chatsystem.pb.cc
if [ ! -e ./build ]
then 
    mkdir build
else 
    rm -rf build/*
fi
if [ ! -e ./bin ]
then  mkdir bin
else rm -rf bin/*
fi
if [ ! -e ./log ]
then  mkdir log
else rm -rf log/*
fi
if [ ! -e ./lib ]
then  mkdir lib
else rm -rf lib/*
fi
cd build
cmake ..
make
网站地图