编译 C 程序并链接

Compiling a C program and linking

我对如何使用 cmake 进行 linking

的理解是否正确?
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})

我正在尝试 link 将 sdl2 添加到我的项目中,但出现了很多错误。

like /src/mingw-org-wsl/4.0-dev/src/libcrt/crt/main.c:91: 未定义对 `WinMain@16' 的引用

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

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

顺便说一下我用的是clion 1.0.5

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

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

target_link_libraries(Sdltest mingw32 SDL2main SDL2)

此外,您不是在构建 C++ 项目,而是在构建 C 项目,因此标志变量应该是 CMAKE_C_FLAGS

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

make VERBOSE=1

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


PS.

如果您想启用更多警告,您可以添加更多标志,例如 -Wextra-pedantic。是的,它有时可能会产生误报,尤其是在包含来自外部库的头文件时,但我认为在开发时最好有很多警告。