我正在尝试通过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)
)
我错过了什么吗?提前谢谢。
答案 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})
)周围有花括号,并且未创建该伪目录。也许这与你的问题有关。