CMake如何執行shell命令

2021-06-22 14:59:32 字數 1284 閱讀 9179

我在cmake編譯後想執行一些特定的shell命令(執行、lcov收集**覆蓋報告等),我又不想寫到xx.sh的shell指令碼中,如何直接通過cmake執行shell命令呢?

在網上翻江倒海了一下,找到了乙個老外寫的cmake指令碼,參考他,自己寫了下,終於實現了我的目標,主要是用add_custom_target和execute_process來實現。具體實現我還是用經典的hello world來解釋下:

在你的cmakelists.txt中,加入以下**:

set(run_hello_world_command_file "$/run-hello-world.cmake")

file(write $

"set(env)\n")

run_hello_world_command_file 

}"execute_process(command \"$\" --html  -r \"$\" --output \"$\" working_directory \"$\")\n")

add_custom_target(run-hello-world

command $ args -p $

depends hello-world)

$其實就是cmake,

上面我先在cmake_binary_dir加乙個檔案叫run-hello-world.cmake,我在這個file裡面做了兩件事,1.執行hello-world 2. 用gcovr生成了html報告,如果寫成shell指令碼的話就是:

./hello-world

gcovr --html -r "/media/helloworld" --output "/media/helloworld/build"

ok,上面已經在你的cmakelists.txt中加好了上述語句,那如何使用呢?請看下面:

1.編譯 cmake .. -g"unix makefiles" -dcmake_build_type=debug (..表示原始碼位置為上一層路徑,這個根據給位看官具體情況而定)

2.編譯你的target(這裡是hello-world), cmake --build . --use-stderr --target hello-world

3.編譯自己加的target(run-hello-world),cmake --build . --use-stderr --target run-hello-world

ok,執行完上面一句cmake後,cmake就會去執行hello-world,得到**覆蓋率報告,也算是更夠滿足我原先想在cmake中執行shell指令碼的需求。

希望對各位看官能有幫助!

**:

如何在perl中一次執行多條shell命令

在perl中執行shell指令碼命令一般使用system 傳入乙個shell命令給system 如果執行多條shell命令豈不是要執行多個system 那麼 如何通過system 同時執行多條shell命令呢?通過 或者 來合併多條命令,如下 cmd ls l cd home xyz ls l sy...

cmake 執行步驟

在 linux 平台下使用 cmake 生成 makefile 並編譯的流程如下 編寫 cmake 配置檔案 cmakelists.txt 執行命令cmake path或者ccmake path生成 makefile 1。其中,path是 cmakelists.txt 所在的目錄。使用make命令進...

linux中利用shell指令碼條件執行命令

在linux環境中,我們總會有一些命令需要經常用,例如經常跳轉到某些目錄下或者執行某些命令,輸入一連串的命令是很煩的,此時我們可以預先寫一些指令碼然後根據我們的選擇自動執行命令,那豈不是完美,本指令碼就是為此而生的 以跳轉不同的目錄舉例,當然也可以執行其他命令,這時候只需要模擬寫shell命令即可 ...