我爲每個狀態創建軟件。有一些特定於狀態的代碼,以及在所有狀態上運行的一些通用代碼。 我已經創建了以下目錄結構:不止一次使用cmake add_subdirectories與[binary_dir]
common
foo
CMakeLists.txt
bar
CMakeLists.txt
State
AL
bin
src
build
CMakeLists.txt
DMV
CMakeLists.txt
ABC
CMakeLists.txt
AK
bin
src
build
CMakeLists.txt
DMV
CMakeLists.txt
ABC
CMakeLists.txt
CMakeList.txt在每個國家
set (COMMON "/home/me/common")
add_subdirectory(${COMMON}/foo {STATE_BIN_DIR})
add_subdirectory(${COMMON}/bar {STATE_BIN_DIR})
add_subdirectory(${DMV)
的CMakeLists.txt在DMV目錄(和ABC)
install(TARGETS dmv DESTINATION ${STATE_BIN_DIR})
的CMakeLists.txt在普通foo目錄(和欄)
install(TARGETS foo DESTINATION ${STATE_BIN_DIR})
cmake的錯誤:
The binary directory
/home/me/State/AL/bin is already used to build a source directory. It cannot be used to build source directory
/home/me/common/bar
Specify a unique binary directory name.
它工作正常,如果我只是在建設FOO。當我嘗試在目錄結構之外生成欄時,它會失敗。 我不明白的是,我所有的二進制文件(在狀態和普通情況下)都會進入州的bin目錄。
閱讀本: CMAKE add sub-directory which is not sub-directory on real directory
它說。「CMake的不能有兩個不同的源目錄映射到同一個build目錄」
但所有不同的來源(DMV,ABC)都會轉到垃圾箱。它在這裏工作。
的CMake的網站沒有明確規定 https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html
有什麼解決辦法做我想做什麼? 我知道我可以在States目錄下創建foo和bar drirectory,只需將一個CMakeLisist.txt指向共同的代碼即可。
工作。但我想保留代碼的配方。
我想我也可以創建bin/foo和bin/bar來放入這些二進制文件。 但有些共享庫,我想在一個地方。
有什麼想法?
感謝
'但是所有的不同的充源(DMV,ABC)都去斌。 - 你的意思是說,在給定的源碼目錄下創建的*可交付成果是**安裝到'bin'的?如果是這樣,這是不被禁止的。但是相同的目錄不能用於**構建**不同的源目錄。你無法克服這一點。 – Tsyvarev
感謝您的回答。是的,可交付成果,而不是來源,對不起。我誤解了_binary_dir_的含義。我只是使用與外部源相同的目錄並且它工作。我在做什麼有什麼陷阱? –
@TimEdwards你能解決這個問題嗎?我面臨着與Android項目相同的問題... – ahasbini