簡體   English   中英

找不到 g++ 剛剛創建的 c++ 可執行文件

[英]Can't locate c++ executable that g++ just created

這對我來說是一個莫名其妙的問題,如果有人有見地,我會很高興。

我的任務是將當前使用 makefile 的現有小型 c++ 項目轉換為基於 CMAKE 的項目。 我完成了任務,在所有相關文件夾中創建了 CMakeLists.txt 等。 然后我在源樹中創建了一個構建文件夾,並在運行 cmake 后嘗試構建。 一切都按預期正確構建(首先從其他人的代碼構建 3 個庫,這些庫鏈接到該項目的代碼等)並且打印的狀態“make”命令確實顯示了這一點。 最后,命令 100% 完成,最后一行說[100%] Built target XXXXX

但是,該目標可執行文件無處可尋! 我已經嘗試將CMAKE_ARCHIVE_OUTPUT_DIRECTORY顯式設置為源中的目錄(這是我們理想的方式),其他文件夾,根本不設置它等,但無濟於事。 我使用 add_executable 命令創建了這個可執行文件,如果我改為從同一位置的相同源創建一個庫,則庫 (.a) 可以很好地創建,但是如果我創建它來聲明它已構建,我似乎無法找到這個可執行文件.

如果有幫助,同一個項目(如果在 Windows 上構建)可以很好地創建 EXE,如果我指定,我可以在源文件中的文件夾中查看/運行它。

(我在未關閉 SIP 的最新 Macbook Pro 上的 MacOS Sierra 上運行 g++/cmake。)

這是我的最小 CMakeLists。 外部庫名替換為 LLLL。 它們是 lib 目錄中 LLLL.a 格式的外部庫。

cmake_minimum_required(VERSION 3.0)
project(my_exec C CXX)
cmake_policy(SET CMP0010 NEW)

set(CMAKE_MACOSX_RPATH TRUE)

SET(ENABLE_WARNINGS TRUE)

set(CMAKE_BUILD_TYPE Release)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -c -std=c++11 -w")

#Includes
include_directories(SYSTEM ${CMAKE_SOURCE_DIR}/inc/)

#External libs
set (EXT_LIBS LLLL LLLL LLLL)

#Where to find the libs above?
link_directories(${CMAKE_SOURCE_DIR}/lib/}) 

#Get all sources and headers
file(GLOB SOURCES ${CMAKE_SOURCE_DIR}/src/*.cpp)

#Finally!
add_executable(my_exec ${SOURCES})
target_link_libraries(my_exec ${EXT_LIBS})

message("Target path should be ${CMAKE_BINARY_DIR}")

以下是 cmake 和 build 輸出,還找到顯示沒有 exec 的輸出

XXXX-MacBook-Pro:build XXXX$ rm -rf *
XXXX-MacBook-Pro:build XXXX$ cmake ..
-- The C compiler identification is AppleClang 9.0.0.9000037
-- The CXX compiler identification is AppleClang 9.0.0.9000037
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Target path should be /Users/XXXX/XXXX/XXXX/XXXX/build
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/XXXX/XXXX/XXXX/XXXX/build
XXXX-MacBook-Pro:build XXXX$ make -j34
Scanning dependencies of target my_exec
[  9%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 18%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 27%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 36%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 45%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 54%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 72%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 72%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 81%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[ 90%] Building CXX object CMakeFiles/my_exec.dir/src/aaaa.cpp.o
[100%] Linking CXX executable my_exec
[100%] Built target my_exec

XXXX-MacBook-Pro:build XXXX$ cd ..
XXXX-MacBook-Pro:YYYY XXXX$ find . -name my*
./build/CMakeFiles/my_exec.dir

我想我已經找到了花了我很長時間的答案。 問題是我擁有的一個小 CMAKE_CXX_FLAG: "-c" 它根本不應該在那里。 CMake(出於未知原因)將該標志傳遞給“驅動程序”c++/g++,即使在鏈接階段導致調用底層編譯器而不是鏈接器,然后編譯器抱怨但僅作為警告它正在獲取所有這些非-sense 像 *.o 文件和 -l 標志。 結果永遠不會發生鏈接,因此永遠不會生成可執行文件。 最重要的是,所有這些戲劇都是隱藏的,永遠不會向用戶顯示,除非確實使 VERBOSE=1 並實際讀取最后一個命令,然后嘗試使用 -Wall 或 -Werror 自己使用最后一個命令來顯示這些編譯器警告它正在獲取所有這些鏈接器標志。

我認為這是一個 CMake 錯誤,但我不確定。

暫無
暫無

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

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