簡體   English   中英

檢查g ++的返回值

[英]Check return value of g++

我讀過this ,它建議進行以下編譯檢查:

installCheck () {
  if g++ check_opencv.cpp -o check_opencv; then
    return 1
  else
    rm check_opencv
    return 0
  fi
}

if installCheck $0; then
  echo "OpenCV already installed, skipping"
  exit 0
fi

但是,運行此腳本可以得到:

check_opencv.cpp:2:33: fatal error: opencv2/core/core.hpp: No such file or directory
compilation terminated.
rm: check_opencv: No such file or directory
OpenCV already installed, skipping

這是錯誤的。 然后我更改為:

installCheck () {
  g++ check_opencv.cpp -o check_opencv
  if [[ $? -ne 0 ]]; then

它工作正常:

check_opencv.cpp:2:33: fatal error: opencv2/core/core.hpp: No such file or directory
compilation terminated.
Cloning into 'opencv-2.4.9'...

這是為什么? 由於[[g++

有人在說:“可悲的是因為它原來提出退貨0天氣或沒有失敗。” g++失敗時是否不總是返回非零值? 也許我想念一些明顯的事情,所以請為我澄清。 非常感謝你!

更新:事實證明我對bash的理解是錯誤的。 返回值0以bash計算為true,這與我之前的想法相矛盾。 這會有所幫助。

if g++ check_opencv.cpp -o check_opencv; then
  return 1

如果編譯成功,將返回失敗(1)。 顯然,如果編譯失敗,您想返回失敗,那就是:

if ! g++ check_opencv.cpp -o check_opencv; then
  return 1

或者,您可以按照正確的順序放置正確和錯誤的分支:

installCheck () {
  if g++ check_opencv.cpp -o check_opencv; then
    rm check_opencv
    return 0
  else
    return 1
  fi
}

在鏈接的問題中,我看不到任何地方提示您建議的代碼。

我想您的目的是避免在編譯成功的情況下污染文件系統,因為編譯本身是唯一需要的測試。 您還可以使用以下方法實現此目的:

installCheck () {
  g++ check_opencv.cpp -o check_opencv
  local rv=$?
  rm -f check_opencv
  return rv
}

if cmd; ... 如果cmd成功,則if cmd; ...為“ true”,即cmd的退出狀態為0-在邏輯上等效於cmd; if [[ $? -eq 0 ]]; ... cmd; if [[ $? -eq 0 ]]; ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM