2012-03-27 55 views
0

我試圖通過CMake的編譯一個非常小的程序,但是當我編譯它,然後嘗試構建它,它給了我一個錯誤:我的CMakeLists.txt文件有什麼問題?

fatal error LNK1181: cannot open input file '.\cm_project.dir\SharedCRT-Release\dummy.obj' 

dummy.cpp是我的項目中的源文件。 CMakeLists.txt文件如下所示:

project(cm_project) 

set(SOURCES 
    src/dummy.cpp 
    include/version.h 
) 

add_library(cm_project STATIC ${SOURCES}) 

set(LIBRARY_OUTPUT_PATH 
    $(PlatformName) 
) 

我錯過了什麼嗎?提前致謝。

+0

你正在爲哪個平臺建造?換句話說,你傳遞給'cmake -G' – 2012-03-27 19:41:41

+0

@RandallCook:謝謝你的迴應。我在Visual Studio 9 2008上運行它Win64 – user1202422 2012-03-27 20:15:26

+0

似乎與Visual Studio 10 2008(Win32)一起工作正常。不幸的是,我無法訪問您的設置。 – Anonymous 2012-03-28 20:58:20

回答

1

這只是一個猜測,但它可能是dummy.cpp由於錯誤而無法編譯,並且因爲它沒有編譯,鏈接器沒有dummy.obj鏈接,因此鏈接器錯誤你看。奇怪的是沒有編譯器錯誤(或者沒有報告)。

我試圖在我的系統上重現這種情況,不幸的是在這種情況下不是Windows,而是我在其上定位Unix makefile(cmake -G "Unix Makefiles")的Mac。我最初在CMakeLists.txt的同一目錄下保存了dummy.cpp和version.h(這是dummy.cpp中的#include),並且它沒有任何錯誤。當我將dummy.cpp移動到src子目錄,並將version.h移動到include子目錄時,編譯打破了,因爲編譯器不知道在哪裏找到version.h。我需要添加這樣一行來告訴它,它是:

include_directories(./include) 

順便說一句,我本來喜歡set(LIBRARY_OUTPUT_PATH $(PlatformName))線(周圍PlatformName括號中)在我的CMakeLists.txt文件,但我結束了一個調用CMake後調用$(PlatformName)。我將它改爲在PlatformName(set(LIBRARY_OUTPUT_PATH ${PlatformName}))周圍使用花括號,並且沒有創建虛假目錄。也許這與你的問題有關。

+0

謝謝!你的建議幫助我調試問題! – user1202422 2012-03-29 13:56:08