我的CMakeLists.txt文件出了什么问题?

时间:2012-03-27 19:15:46

标签: c++ cmake

我正在尝试通过CMake编译一个非常小的程序,但是当我编译它然后尝试构建它时,它给了我一个错误:

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)
)

我错过了什么吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

这只是猜测,但可能是因为错误而没有编译dummy.cpp,并且因为它没有编译,所以链接器没有用于链接的dummy.obj,因此链接器出错了你看到。奇怪的是没有编译器错误(或没有报告)。

我试图在我的系统上重现这一点,不幸的是,在这种情况下不是Windows,而是我的目标是Unix makefile(cmake -G "Unix Makefiles")。我最初在与CMakeLists.txt相同的目录中保存了dummy.cpp和version.h(由dummy.cpp包含#included),并且它没有错误。当我将dummy.cpp移动到src子目录,并将version.h移动到include子目录时,编译崩溃了,因为编译器不知道在哪里找到version.h。我需要添加这样的一行来告诉它它在哪里:

include_directories(./include)

BTW,我最初在我的CMakeLists.txt文件中有一行set(LIBRARY_OUTPUT_PATH $(PlatformName))(带有围绕PlatformName的括号),但在调用CMake后我最终得到了一个名为$(PlatformName)的目录。我将其更改为在PlatformName(set(LIBRARY_OUTPUT_PATH ${PlatformName}))周围有花括号,并且未创建该伪目录。也许这与你的问题有关。