2012-03-27 52 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