mar*_*uek 4 glew sdl cmake lnk2019
我只是想设置一个能够在CMake支持的每个平台上编译的简单项目.我在Win7系统上启动了我的项目并编写了一个包含SDL.h和GL/glew.h的main.cpp.main函数的样式是简单的c ++:
int main(int, char**) {}
Run Code Online (Sandbox Code Playgroud)
在我的CMakeLists.txt中,我调用了find_package(SDL)和find_package(GLEW).CMake-part运行良好,所以我刚刚打开了vs10-solution-file并尝试编译,当我得到LNK2019时:
错误LNK2019:函数_ _tmainCRTStartup中引用的未解析的外部符号main
这意味着我选择了错误的子系统,不是吗?但是,如果我只是将子系统从CONSOLE切换到WINDOWS并返回,则问题仍然存在.CMake为此设置了隐藏选项吗?如何在vs10中编译我的简单程序?
我今晚遇到了这个问题.我正在使用CMake创建一个MSVC项目来构建我的GLFW应用程序.当然,如果你自己使用MSVC,摆脱控制台窗口的古老技巧是进入属性并将"子系统"设置为"Windows"和"入口点" mainCRTStartup,这对应于添加该/SUBSYSTEM:WINDOWS /ENTRY:"mainCRTStartup"标志来link.exe,但CMake的不提供一种简单的方法来做到这一点.
如果您只是执行一个直接add_executable()命令,您将/SUBSYSTEM:CONSOLE /ENTRY:"mainCRTStartup"被传递给链接器.
如果你做了add_executable(exename WIN32 ...),你就会得到/SUBSYSTEM:WINDOWS.
Gaah!这两种选择都让我们中途到了!
我浏览了CMake随附的.cmake文件(fwiw,我正在使用CMake 2.8.10和Visual Studio 2012 Express),并发现似乎控制/SUBSYSTEM和/ENTRY标志的变量被调用CMAKE_CREATE_WIN32_EXE.因此,要设置这两个部分,我们只需要更改该变量.这就是我最终得到的结果:
if(MSVC)
set(CMAKE_CREATE_WIN32_EXE "/SUBSYSTEM:WINDOWS /ENTRY:\"mainCRTStartup\"")
endif(MSVC)
Run Code Online (Sandbox Code Playgroud)
希望能帮助别人.
| 归档时间: |
|
| 查看次数: |
1900 次 |
| 最近记录: |