CMake 调用 Shell 脚本
来源:互联网 发布:面试淘宝运营技巧 编辑:程序博客网 时间:2024/05/24 06:59
我们考虑这样一种场景:
现有目录结构如下:
|-cmakeTest |-shell.sh |-CMakeLists.txt |-src |-main.c
我们需要把 src/main.c 提取到 cmakeTest 目录下,对其进行编译。我们的做法是这样子的:shell.sh 脚本执行复制文件操作,CMakeLists.txt 调用 shell.sh 获得 main.c 并完成构建。
main.c 是这样的:
#include <stdio.h>int main(){ printf("Hello CMake!\n"); return 0;}
shell.sh 是这样的:
echo "Begin"cp ../$1/main.c ../main.cecho "End"
注意 cp 语句中,main.c 的路径写法,还有$1
参数。一会儿解释为什么是这样的。
重点来了,CMakeLists.txt 是这样的:
cmake_minimum_required (VERSION 2.6) execute_process(COMMAND sh ../shell.sh src)aux_source_directory(. SRC_LIST)add_executable(main ${SRC_LIST})
CMakeLists.txt 通过 execute_process() 命令调用了 shell.sh 并传入了参数 src 。这里的 src 就是 shell.sh 里面 cp 语句的$1
,cp 语句展开后就是:
cp ../src/main.c ../main.c
至于这奇怪的 ../
路径,是因为 execute_process() 命令开起了一个子线程来执行 shell 命令,这个子线程的工作目录和当前工作目录一致。我会采用外部构建方式执行 CMake,也就是新建 build 目录,进入 build 目录执行 CMake,于是子线程的工作目录也就是当前工作目录—— build,所以需要../
才能够正确找到需要的文件。
完整的演示如下:
$ mkdir build$ cd build$ cmake ..-- The C compiler identification is GNU 4.8.4-- The CXX compiler identification is GNU 4.8.4-- Check for working C compiler: /usr/bin/cc-- Check for working C compiler: /usr/bin/cc -- works-- Detecting C compiler ABI info-- Detecting C compiler ABI info - done-- Check for working CXX compiler: /usr/bin/c++-- Check for working CXX compiler: /usr/bin/c++ -- works-- Detecting CXX compiler ABI info-- Detecting CXX compiler ABI info - doneBeginEnd-- Configuring done-- Generating done-- Build files have been written to: /????/CMakeTest/build$ makeScanning dependencies of target main[100%] Building C object CMakeFiles/main.dir/main.c.oLinking C executable main[100%] Built target main$ ./main Hello CMake!
0 0
- CMake 调用 Shell 脚本
- CMake调用shell脚步
- 《cmake调用shell》
- java调用Shell脚本
- java调用Shell脚本
- JAVA 调用shell脚本
- Java 调用Shell脚本
- Python 调用shell脚本
- shell脚本调用java
- Java调用shell脚本
- python调用Shell脚本
- python调用Shell脚本
- python调用shell脚本
- JAVA调用Shell脚本
- java调用Shell脚本
- java调用shell脚本
- ant调用 shell脚本
- python调用shell脚本
- 博客搬家 -- 将博客从CSDN迁移到hexo上
- (LeetCode 101) Symmetric Tree
- CommandInvokationFailure: Failed to re-package resources. See the Console for details.
- java访问修饰符
- leetcode——链表reorder
- CMake 调用 Shell 脚本
- activity间传递数据
- 1001 and 1002 of search
- unix环境高级编程第三版环境配置
- android studio module上传到jcenter
- 苹果产品设计中的黄金比例运用
- spring知识点积累2
- 吴翰清:云计算安全是“皇帝的新装”么?
- Mysql之SQL Mode用法详解