编译C程序并链接

时间:2015-07-29 14:15:09

标签: c gcc cmake sdl

我是否正确理解如何使用cmake进行链接

cmake_minimum_required(VERSION 3.2)
project(Sdltest)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Werror -lmingw32 -lSDL2main -lSDL2")

set(SOURCE_FILES main.c)
add_executable(Sdltest ${SOURCE_FILES})

我试图将sdl2链接到我的项目但是我遇到了很多错误。

喜欢 /src/mingw-org-wsl/4.0-dev/src/libcrt/crt/main.c:91:未定义引用`WinMain @ 16&#39; < /强>

当我在cmd上使用gcc时,它会完美地编译

gcc main.c -o test -Wall -Werror -lmingw32 -lSDL2main -lSDL2

顺便说一句,我使用clion 1.0.5

1 个答案:

答案 0 :(得分:2)

问题是标志,你混合编译器链接器标志。首先,这是有问题的,因为在链接时不使用编译器标志,其次因为GNU链接器需要库在命令行上的主源(或对象)文件之后,就像手动构建时一样

您可以使用CMakeLists.txt文件中的target_link_libraries命令设置库:

target_link_libraries(Sdltest mingw32 SDL2main SDL2)

此外,您还没有构建C ++项目,您正在构建C项目,因此flags变量应为CMAKE_C_FLAGS

最后,如果您想知道CMake在构建时使用的命令和参数,请尝试将VERBOSE设置为非零,例如。

make VERBOSE=1

我确定可以将该参数添加到CLion。

PS。

如果您想要启用更多警告,可以添加更多标记,例如-Wextra-pedantic。是的,它有时可能会产生误报,特别是在包含来自外部库的头文件时,但我认为在开发时需要处理很多警告而不是很少。