Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake to Makefile-Makefile给出'collect2:错误:ld返回1退出状态`_C++_Makefile_Cmake - Fatal编程技术网

C++ CMake to Makefile-Makefile给出'collect2:错误:ld返回1退出状态`

C++ CMake to Makefile-Makefile给出'collect2:错误:ld返回1退出状态`,c++,makefile,cmake,C++,Makefile,Cmake,我试图通过以下示例熟悉Cmake: 简而言之,我有这个C++代码。我想使用Cmake为这段代码生成一个makefile,然后运行这个makefile。不幸的是,生成的Makefile给出了一个错误。我正在使用Windows7 这是我正在使用的代码 文件:main.cpp #include "ToDo.h" int main( int argc, char** argv) { ToDo list; return 0; } #include "ToDo.h" ToD

我试图通过以下示例熟悉Cmake: 简而言之,我有这个C++代码。我想使用Cmake为这段代码生成一个makefile,然后运行这个makefile。不幸的是,生成的Makefile给出了一个错误。我正在使用Windows7

这是我正在使用的代码

文件:main.cpp

#include "ToDo.h"
int main(  int    argc,  char** argv)
{
    ToDo list;

    return 0;
}
#include "ToDo.h"


ToDo::ToDo()
{
}

ToDo::~ToDo()
{
}
#endif // TODO_H
文件:ToDo.h

#ifndef TODO_H
#define TODO_H

class ToDo
{
public:
    ToDo();
    ~ToDo();
};
文件:ToDo.cpp

#include "ToDo.h"
int main(  int    argc,  char** argv)
{
    ToDo list;

    return 0;
}
#include "ToDo.h"


ToDo::ToDo()
{
}

ToDo::~ToDo()
{
}
#endif // TODO_H
这是myCMakeLists.txt

project("To Do List")


add_executable(toDo main.cpp ToDo.cpp)
这就是我在cygwin所做的

admin@US01WKS03044 /cygdrive/c/CmakeTest/build
$ cmake -G "Unix Makefiles" ..
-- The C compiler identification is unknown
-- The CXX compiler identification is GNU 4.9.2
-- Check for working C compiler: C:/cygwin64/bin/cc
-- Check for working C compiler: C:/cygwin64/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Check for working CXX compiler: C:/cygwin64/bin/c++.exe
-- Check for working CXX compiler: C:/cygwin64/bin/c++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - failed
-- Detecting CXX compile features
-- Detecting CXX compile features - failed
-- Configuring done
-- Generating done
-- Build files have been written to: C:/CmakeTest/build

admin@US01WKS03044 /cygdrive/c/CmakeTest/build
$ ls
cmake_install.cmake  CMakeCache.txt  CMakeFiles  Makefile

admin@US01WKS03044 /cygdrive/c/CmakeTest/build
$ make VERBOSE=1
"C:/Program Files (x86)/CMake/bin/cmake.exe" -HC:/CmakeTest -BC:/CmakeTest/build --check-build-system CMakeFiles/Makefile.cmake 0
"C:/Program Files (x86)/CMake/bin/cmake.exe" -E cmake_progress_start C:/CmakeTest/build/CMakeFiles C:/CmakeTest/build/CMakeFiles/progress.marks
/usr/bin/make -f CMakeFiles/Makefile2 all
make[1]: Entering directory `/cygdrive/c/CmakeTest/build'
/usr/bin/make -f CMakeFiles/toDo.dir/build.make CMakeFiles/toDo.dir/depend
make[2]: Entering directory `/cygdrive/c/CmakeTest/build'
"C:/Program Files (x86)/CMake/bin/cmake.exe" -E cmake_depends "Unix Makefiles" C:/CmakeTest C:/CmakeTest C:/CmakeTest/build C:/CmakeTest/build C:/CmakeTest/build/CMakeFiles/toDo.dir/DependInfo.cmake --color=
Dependee "C:/CmakeTest/build/CMakeFiles/toDo.dir/DependInfo.cmake" is newer than depender "C:/CmakeTest/build/CMakeFiles/toDo.dir/depend.internal".
Dependee "C:/CmakeTest/build/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "C:/CmakeTest/build/CMakeFiles/toDo.dir/depend.internal".
Scanning dependencies of target toDo
make[2]: Leaving directory `/cygdrive/c/CmakeTest/build'
/usr/bin/make -f CMakeFiles/toDo.dir/build.make CMakeFiles/toDo.dir/build
make[2]: Entering directory `/cygdrive/c/CmakeTest/build'
"C:/Program Files (x86)/CMake/bin/cmake.exe" -E cmake_progress_report C:/CmakeTest/build/CMakeFiles 1
[ 50%] Building CXX object CMakeFiles/toDo.dir/main.cpp.o
C:/cygwin64/bin/c++.exe     -o CMakeFiles/toDo.dir/main.cpp.o -c C:/CmakeTest/main.cpp
"C:/Program Files (x86)/CMake/bin/cmake.exe" -E cmake_progress_report C:/CmakeTest/build/CMakeFiles 2
[100%] Building CXX object CMakeFiles/toDo.dir/ToDo.cpp.o
C:/cygwin64/bin/c++.exe     -o CMakeFiles/toDo.dir/ToDo.cpp.o -c C:/CmakeTest/ToDo.cpp
Linking CXX executable toDo.exe
"C:/Program Files (x86)/CMake/bin/cmake.exe" -E remove -f CMakeFiles/toDo.dir/objects.a
C:/cygwin64/bin/ar.exe cr CMakeFiles/toDo.dir/objects.a @CMakeFiles/toDo.dir/objects1.rsp
C:/cygwin64/bin/c++.exe     -Wl,--whole-archive CMakeFiles/toDo.dir/objects.a -Wl,--no-whole-archive  -o toDo.exe -Wl,--out-implib,libtoDo.dll.a -Wl,--major-image-version,0,--minor-image-version,0
/usr/lib/gcc/x86_64-pc-cygwin/4.9.2/../../../../lib/libcygwin.a(libcmain.o): In function `main':
/usr/src/debug/cygwin-1.7.33-1/winsup/cygwin/lib/libcmain.c:39: undefined reference to `WinMain'
/usr/src/debug/cygwin-1.7.33-1/winsup/cygwin/lib/libcmain.c:39:(.text.startup+0x7e): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `WinMain'
collect2: error: ld returned 1 exit status
make[2]: *** [toDo.exe] Error 1
make[2]: Leaving directory `/cygdrive/c/CmakeTest/build'
make[1]: *** [CMakeFiles/toDo.dir/all] Error 2
make[1]: Leaving directory `/cygdrive/c/CmakeTest/build'
make: *** [all] Error 2

为什么生成文件失败?

该错误意味着编译器正在寻找
WinMain
作为可执行文件的入口点,而不是经典的
main
,并且它找不到它


由于我不使用cygwin,所以我无法解释原因(如果我没有弄错的话,WinMain是特定于windows gui应用的),但您可以将
main
重命名为
WinMain
,看看它是否有效。或者看看。

你不应该发布一些cmakelists.txt文件吗?是的,我忘了。发布它-当您在评论时不知道为什么downvoteThe错误是
/usr/src/debug/cygwin-1.7.33-1/winsup/cygwin/lib/libcmain.c:39:未定义对
WinMain'
的引用。我不知道为什么会这样。您是否未能链接到某些Windows库?您是否未能提供一些标准的Windows入口点(即
WinMain`)?首先:您是否需要TODO.cpp末尾的#endif//TODO_H?第二:我在这里使用linux,一切都可以很好地编译,在windows中,您可能需要向编译器添加额外的参数(请参阅mingw关于它们),并添加可执行的额外参数,如“WIN32”(请参阅文档)。在windows中从cmd运行时,它会提供相同的行为