2016-03-04 273 views
1

當我使用「make -j」時,出現「No rule to make target」錯誤。當我使用make(no -j)時,我不會收到錯誤。該庫建立在以下目錄中:「沒有規則制定目標」使用make -j與cmake時出錯

add_library(Environment ${CXXSRCS} 

和libEnvironment.a已創建。在另一個目錄libEnvironment.a被引用:

add_executable(GetEnv ${GETSRCS}) 
target_link_libraries(GetEnv 
    ${tools_environment_SOURCE_DIR}/libEnvironment.a 
    xml++-2.6 
    ) 

當我用「的cmake -j」跑,我得到的錯誤,那麼該庫被創建,但cmake的停止。當我再次運行cmake -j時,一切都很開心,因爲庫已經創建。有任何想法嗎?

回答

1

make -j當在使用中,任何目標可以是內置的並行除非一個目標是明確地組從另一依賴。

在你的情況下,你有GetEnv(可執行文件)目標,它使用由Environment(庫)目標生成的文件。但是你在目標之間沒有明確的依賴關係!

正確的(和最簡單的),與庫鏈接使用庫目標名稱,而不是庫文件,該文件是由目標創建方式:

target_link_libraries(GETENV 環境 XML ++ - 2.6)

這樣一種方式,你將有GetEnvEnvironment目標之間的依賴關係,因此make -j將不再嘗試並行地構建它們。

+0

工作!我會給你一個提升,但我沒有街頭信譽。 –

+0

@DougFulford接受答案,然後我們知道這個問題得到了回答。謝謝。 – usr1234567

相關問題