我在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命令即可 ...