2016-07-27 41 views

回答

1

可以在add_executable()addlibrary()列出目標文件一起來源:

add_executable(myProgram 
    source.cpp 
    object.o 
) 

的唯一的事情是,你需要使用add_custom_command生成目標文件,所以CMake的就知道從哪裏得到他們。這也將確保您的目標文件在鏈接myProgram之前生成。

+0

我試過這個,但它不起作用!我做了一個詳細的cmake,並且在鏈接過程中根本沒有提到目標文件!我使用$ {CMAKE_CURRENT_SOURCE_DIR} /libs/objectfile.o提供完整路徑 – mkmostafa

+0

在您運行CMake的時刻它是否存在? – arrowd

+0

我找到了解決方案。這與您僅在小改編時提出的建議類似。 :) – mkmostafa

2
SET(OBJS 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o 
) 


SET_SOURCE_FILES_PROPERTIES(
    ${OBJS} 
    PROPERTIES 
    EXTERNAL_OBJECT true 
    GENERATED true 
) 

這對我有效。顯然,必須設置這兩個變量EXTERNAL_OBJECT,GENERATED

+1

代碼片段缺少將'add_executable()'調用作爲其參數之一的對象文件。它迷惑了一些讀者,像這樣:https://stackoverflow.com/questions/48209751/cmake-mingw-compiler-flag-finstrument-functions。 – Tsyvarev

2

我已經在我的項目做到了這一點與target_link_libraries()

target_link_libraries(
    myProgram 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o 
) 

target_link_libraries()任何完整路徑被假定爲被轉發到連接器的文件。

+0

這是假設我試圖鏈接一個庫,而不是一個普通的.o文件,當我嘗試這個。 –

+0

@DEEval是的,你需要知道CMake在這裏做什麼,這是這種方法的醜陋的一部分。我認爲這也與你的個人品味有關:外部對象文件是更多的「源文件」還是「與文件鏈接的東西」。 – Florian

相關問題