通过CMakeLists.txt和shell脚本实现自动化编译

2023-05-16

这是项目的整个目录结构

项目目录

#此种方式配置犹如Vs中的配置一样
# CMakeLists file
cmake_minimum_required(VERSION 2.6)

project (server)

#编译选项
SET(CMAKE_CXX_FLAGS_DEBUG "-g -ggdb -Wall -Wno-unknown-pragmas")
SET(CMAKE_CXX_FLAGS "-std=c++0x -Wno-deprecated")
SET(CMAKE_CXX_FLAGS_RELEASE "-g -O2")
SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--hash-style=sysv")

#指定头文件
#其中PROJECT_SOURCE_DIR是此CMakeList所在的目录
include_directories ("${PROJECT_SOURCE_DIR}/lib/linux/include" "${PROJECT_SOURCE_DIR}/lib/linux/include/mysql" "${PROJECT_SOURCE_DIR}/lib/boost_1_53_0" "${PROJECT_SOURCE_DIR}/event"  )

#指定链接库(libXXXX.so动态库, libXXXX.a静态库)的目录
link_directories ("${PROJECT_SOURCE_DIR}/lib/linux/lib")

#添加子目录(其中子目录中含有项目文件.cpp)
add_subdirectory (common)
add_subdirectory (event)
add_subdirectory (logic)
add_subdirectory (net)
add_subdirectory (worldd)
add_subdirectory (gamed)
add_subdirectory (pvpwar/battled)
add_subdirectory (pvpwar/matchd)

#最终要生成的可执行文件 和main函数所在的文件
add_executable (gamed gamed/Daemon.cpp)
add_executable (worldd worldd/worldd.cpp)
add_executable (battled pvpwar/battled/battle.cpp)
add_executable (matchd pvpwar/matchd/match.cpp)

#指定生成的可执行程序需要的库如gamed 依赖于gamed game logic event common net protobuf log4cxx config++ tokyotyrant mysqlclient 
target_link_libraries (gamed game logic event common net protobuf log4cxx config++ tokyotyrant mysqlclient)
target_link_libraries (worldd world logic event common net protobuf log4cxx config++ tokyotyrant)
target_link_libraries (battled battle logic event common net protobuf log4cxx config++ )
target_link_libraries (matchd match logic event common net protobuf log4cxx config++ tokyotyrant mysqlclient)
#这是自动写子目录CMakeList的脚本,文件名为叫autoCeateSubCmakeList.sh(对应项目目录图片中的./buildcmake.sh)
#build net
cd net
rm -f CMakeLists.txt
echo "# CMakeLists file">>CMakeLists.txt
echo "add_library(net NetCache.cpp NetHandler.cpp ProtocolHandler.cpp )">>CMakeLists.txt
cd ..

#build common
cd common
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(common  ">>CMakeLists.txt
ls xml/*.cpp>>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ..

#build event 
cd event
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(event  ">>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ..

#build gamed
cd gamed
rm -f CMakeLists.txt
echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(game  ">>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
ls event/*.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ..

#build logic
cd logic
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(logic  ">>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ..


#build worldd
cd worldd
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(world  ">>CMakeLists.txt
ls event/*.cpp>>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ..

#build battle
cd pvpwar/battled
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(battle  ">>CMakeLists.txt
ls event/*.cpp>>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ../..

#build match
cd pvpwar/matchd
rm -f CMakeLists.txt

echo "# CMakeLists file" >>CMakeLists.txt
echo "">>CMakeLists.txt
echo "add_library(match  ">>CMakeLists.txt
ls event/*.cpp>>CMakeLists.txt
ls *.cpp>>CMakeLists.txt
echo  ") ">>CMakeLists.txt

cd ../..

此时在主CmakeList.txt文件下,
先执行./autoCeateSubCmakeList.sh,目的是生成子文件夹下CMakeLists.txt
然后执行cmake . 目的是让主CMakeList根据配置还有根据子文件夹下的CMakeList.txt生成makefile
然后就可以执行make的指令进行编译了


#以后代码有更新直接调用此脚本即可自动编译,如果以后有新增加的文件夹,那么需要重新在上面的脚本和主CMakeList中按照格式新增新的文件夹
#!/bin/bash
set -x
svn up
./buildcmake.sh
make -j 8
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过CMakeLists.txt和shell脚本实现自动化编译 的相关文章

  • 在 UNIX 时间戳 Shell/Bash 中将日期与时区转换

    我需要将日期从格式为 yyyy mm dd hh mm ss TZ 的字符串转换为 UNIX 时间 TZ 时区 到目前为止我所做的是将没有时区的 yyyy mm dd hh mm ss 格式的日期转换为时间戳 dateYMD 2019 2
  • 使用与后期步骤中的 Shell 脚本中的克隆相同的 http git 凭据

    我想要自动化我们的发布过程 并且我有一个 Maven 项目的以下 Jenkins 构建作业 使用配置的 Jenkins 凭证 用户名 密码 克隆 Git 存储库 执行一些 Maven 命令以进行构建 配置一个后步骤来执行一些额外的 Git
  • Bash 'printf' 相当于命令提示符?

    我希望在 Windows 命令提示符下将一些字符串输入通过管道传输到一个小型 C 程序 在 bash 中我可以使用 printf AAAAA x86 x08 x04 xed program 本质上 我需要一些东西来转义命令提示符中的那些十六
  • 如何从 C 文件更改终端中的目录

    如何从 C 程序更改将在终端上生效的目录 实际上不要告诉 system 函数或 chdir 函数 这些仅适用于 C 中的进程或子 shell 假设我正在从 bash shell 执行一个 C 程序 其进程 ID 为 10223 那么 我可以
  • Linux shell 命令逐块读取/打印文件

    是否有一个标准的 Linux 命令可以用来逐块读取文件 例如 我有一个大小为 6kB 的文件 我想读取 打印第一个 1kB 然后是第二个 1kB 看来猫 头 尾在这种情况下不起作用 非常感谢 你可以这样做read n在循环中 while r
  • 当我通过 shell 脚本创建 .txt 文件时,为什么文件名末尾出现问号? [复制]

    这个问题在这里已经有答案了 我正在编写一个 shell 脚本 我应该在其中创建 1 个文本文件 当我这样做时 文件名末尾出现一个问号 是什么原因 我正在 bash 脚本中尝试以下方法 1 grep ERROR a1 gt text txt
  • 如何在Windows Git shell中运行./script.sh?

    也许这很尴尬 但是当我在 Git shell 中工作时 我无法在 Windows 上运行 sh 文件 也许我必须安装一些东西 但我认为 Git 会支持 bash 命令 我知道 Windows 不使用 sh 文件 我正在执行安装步骤游戏结束
  • 退出 bash 脚本但保持进程运行

    我正在运行服务器 需要使用参数执行以下命令 这些脚本目前工作得很好 但问题是当我运行脚本时我无法返回到控制台 它在控制台中保持运行 如果我强行停止它 那么该过程也会停止 我想继续运行该进程并返回到控制台 bin sh php home st
  • ANSI 转义码在行尾有奇怪的行为

    重现步骤 考虑以下 shell 命令 echo e e 41mTest nTest2 e 0mTest3 它打印Test并在下一行中Test2具有红色背景 使用 ANSI 转义码 Test2后面直接是Test3这是无色的 行为 第一次执行此
  • 通过 SSH 将变量传递给远程脚本

    我正在通过 SSH 从本地服务器在远程服务器上运行脚本 首先使用 SCP 复制该脚本 然后在传递一些参数时调用该脚本 如下所示 scp path to script server example org another path ssh s
  • 如何在fish shell脚本中获取程序名称?

    在 bash 中 与在 ruby 中一样 程序名称由 0 给出 鱼里有什么 如果有必要 我可以执行以下操作 set PROGRAM ps no header o args p self egrep o S 2 但我确信程序名称必须已经在某个
  • 在powershell中检查文件是否可读且正常

    我是 powershell 新手 我想检查文件是否可读且正常 在 unix 中 我们可以使用 f 和 r 在一行中完成此操作 例如 以下 shell 脚本函数接受文件名作为参数并检查文件的可读性和规律性 与此等效的 powershell 是
  • 如何使用AWK脚本检查表的所有列数据类型? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在这里 我正在检查表中第一列的数据类型 但我想知道AWK中表的所有列数据类型 我尝试过 但只能获得一列数据类型 例如 Column 1
  • 如何将命令作为参数传递给 ssh [重复]

    这个问题在这里已经有答案了 我的需要是让这个命令起作用 sshpass p XXXX ssh oStrictHostKeyChecking no email protected cdn cgi l email protection sudo
  • 如何将 bash 脚本的整个输出保存到文件

    我正在尝试将 bash 脚本的整个输出保存到文件中 我目前在代码开头有一个参数 ip 地址 如下所示 bin bash USAGE Usage 0
  • Bash 脚本大小限制?

    我有一个 bash 脚本 在 RHEL 或 OS X 上运行时出现以下错误 第 62484 行 意外标记 换行符 附近出现语法错误 第 62484 行 o gz 这是一个自动生成的脚本 用于解决我公司使用的 Grid Engine 计算集群
  • bash 变量中的 Linux 鞭尾/对话框参数错误

    有人可以解释为什么下面的代码不起作用吗 我要疯狂地想找出答案 bin bash TEST M1 1 wire Interface ON echo TEST RESULT dialog title Config Modules State c
  • shell_exec 的输出被截断为 100 个字符

    当在 shell 中运行以下命令时 curl F file filename http 192 168 0 1 产生以下输出 Accuracy 0 0 1 classification Accuracy 0 0 1 classificati
  • awk: hping: 打印 icmp 发起/接收之间的差异

    我有以下输出hping http ports su net hping在 OpenBSD 上 hping icmp ts www openbsd org HPING www openbsd org re0 129 128 5 194 icm
  • 在 bash 中使用单个命令为 shell 变量分配默认值

    我对 bash 3 00 shell 脚本中的变量进行了大量测试 如果未设置变量 则它会分配默认值 例如 if z VARIABLE then FOO default else FOO VARIABLE fi 我似乎记得有一些语法可以在一行

随机推荐

  • 源自中国顶级开源软件再下一城!向量数据库公司Zilliz完成6000万美元B+轮融资

    中国开源届再次迎来一个好消息 xff01 北京时间 8 月 25 日 xff0c 向量数据库公司 Zilliz 宣布完成 6000 万美元的新 笔融资 xff0c 成功将其 B 轮融资规模进 步扩 1 03 亿美元 该笔融资由沙特阿美 xf
  • 耗散性、无源性、正实性

    耗散性和作为其特例的无源性概念广泛存在于物理学 应用数学以及力学等领域 研究耗散性和无源性理论的主要出发点在于他们运用基于能量多输入输出描述给出了控制系统分析和设计的新框架 xff0c 对系统控制的诸多方面都起到了很大的推动作用 不仅在控制
  • python学习笔记之tkinter中的label

    from tkinter import longtext 61 39 39 39 多行 文本 39 39 39 master 61 Tk master title 34 label学习 34 w0 61 Label master text
  • python做数据拟合

    项目中有涉及趋势预测的工作 xff0c 整理一下这3种拟合方法 xff1a 1 线性拟合 使用math import math def linefit x y N 61 float len x sx sy sxx syy sxy 61 0
  • 关于VS编译的程序内存分配只能用1.5~2G上限的优化方案

    关于VS编译的程序 内存分配只能用1 5 2G上限的优化方案 遇到的问题是这样的 xff1a 电脑内存32G xff0c VS2012编译的一个程序 xff0c 在程序运行过程中 xff0c 一旦程序的内存使用达到1 5G xff0c 就会
  • 对称矩阵及正定性

    对称阵是非常重要的矩阵 xff0c 对于实对称矩阵 xff0c 其特征值也为实数 xff0c 且特征向量是垂直的 注意这里的垂直是指 xff1a 如果特征值互不相同 xff0c 那么每个特征值对应的特征向量是在一条线上 xff0c 那些线之
  • C++变量前面加下划线的含义

    参考C 43 43 变量前面加下划线的含义 云 43 社区 腾讯云 C 43 43 变量前面加下划线和不加下划线都不会影响对变量的定义 xff0c 只是风格问题 xff0c 更喜欢将成员变量或者私有成员变量的前面加上下划线 以表示该变量是某
  • 对PX4参数THR_MDL_FAC的理解

    对参数THR MDL FAC的理解 home wp src PX Firmware src lib mixer module mixer module hpp 这里引入了参数THR MDL FAC的使用 DEFINE PARAMETERS
  • TX2安装ubuntu18,ROS

    设备 TX2 8G版本 ubuntu18 04笔记本一台 重要提示 请看完全文再安装 xff01 本文不是手把手教你安装类型教程 给TX2刷系统 看看我的参考博客1吧 最好参考最新的博客 xff0c 现在官网的新版本都不是这样 JetPac
  • px4的PWM是如何输出的

    如果有io芯片 xff0c 且使用了io作为输出PWM的设备 则fmu将mixer传输给io xff0c io进行混控计算并输出PWM xff0c 将pwm结果传递回fmu xff0c 此时无app订阅acuator outpus xff0
  • PX4的mix文件是怎么被使用的呢?

    启动 怎么到启动这里的就不说了 2 作为MIXER FILE被mixer load的 src systemcmds mixer mixer cpp实现mixer load Mixer load调用函数 xff1a load const ch
  • 诚迈科技发布OpenHarmony发行版鸿诚志远HongZOS

    2022年11月3日 xff0c 诚迈科技在东莞松山湖举办 鸿雁于飞 至诚志远 开源鸿蒙 诚迈科技HongZOS发布会 xff0c 发布基于OpenHarmony的商业发行版鸿诚志远 xff08 HongZOS xff09 xff0c 并推
  • PX4阅读开发小技巧

    1 基操 本文件搜索 全局搜索 后退 前进 ctrl 43 p xff0c 搜索文件名 右键 xff0c 书签功能 ctrl 43 单击 F12 xff0c 转到定义 大纲视图 vscode的Open Folder插件搜索文件夹名 2 利用
  • 一种基于接触性检查的全方位空中操作平台

    这里写自定义目录标题 摘要简介相关工作系统描述控制架构A 系统模型B 外部力估计C Interaction Control Selective Impedance 交互作用控制 xff1a 选择性阻抗D Surface Normal and
  • PX4的代码测试

    PX4的代码测试 写完代码总要测试一下吧 xff0c 自己先测试一下 xff0c 怎么用Test呢 xff1f 官方关于测试的概括说明 xff1a Platform Testing and Continuous Integration PX
  • CMAKE学习

    官方学习资料 系统的学习还是看官方资料为好 CMake Reference Documentation CMake 3 23 1 Documentation https cmake org cmake help latest Documen
  • QNAP威联通配置docker下的mysql外部网络访问问题

    QNAP的ContainerStation的mysql 容器默认配置是NAT网络是不行的 直接把mysql容器的网络设置改成host并重启 xff0c 就可以在外部连入了 注意需要设置容器的环境变量来配置root密码 需要配置下 MYSQL
  • Python数据可视化教程之基础篇

    点击上方 AI遇见机器学习 xff0c 选择 星标 公众号 重磅干货 xff0c 第一时间送达 开运张 作者 知乎专栏 来源 https zhuanlan zhihu com p 55642042 经过学习之后 xff0c 我总结了利用py
  • 终身学习楷模!吴恩达74岁父亲8年完成146门课

    点击上方 AI遇见机器学习 xff0c 选择 星标 公众号 重磅干货 xff0c 第一时间送达 学习真谛和乐趣在于保持敏锐的头脑 xff0c 以及发现美的能力 作者 贝爽 我们需要保持精神年轻 xff0c 保持好奇心 这是一位74岁老先生的
  • 通过CMakeLists.txt和shell脚本实现自动化编译

    这是项目的整个目录结构 span class hljs comment 此种方式配置犹如Vs中的配置一样 span span class hljs comment CMakeLists file span span class hljs k