CMAKE:前导或尾随空格(策略CMP0004)

cmake: leading or trailing whitespace (policy CMP0004)

本文关键字:空格 策略 CMP0004 CMAKE      更新时间:2023-10-16

我在关注这个问题。但是,我的cmake面临错误:

-- Configuring done
CMake Error at CMakeLists.txt:18 (add_executable):
Target "main" links to item "-L/usr/lib/x86_64-linux-gnu -lSDL2 " which has
leading or trailing whitespace.  This is now an error according to policy
CMP0004.

-- Generating done

cmake列表有什么问题?

我不认为轻微的cmake版本差异会导致这样的错误。

# CMakeLists.txt
cmake_minimum_required(VERSION 3.5.1)
project (main)
add_executable(main
main.cpp
)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIRS})
target_link_libraries(main ${SDL2_LIBRARIES})

.

// main.cpp
int main()
{
return 0;
}

更新:

内容/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake

# sdl2 cmake project-config input for ./configure scripts
set(prefix "/usr") 
set(exec_prefix "${prefix}")
set(libdir "${prefix}/lib/x86_64-linux-gnu")
set(SDL2_PREFIX "/usr")
set(SDL2_EXEC_PREFIX "/usr")
set(SDL2_LIBDIR "${prefix}/lib/x86_64-linux-gnu")
set(SDL2_INCLUDE_DIRS "${prefix}/include/SDL2")
set(SDL2_LIBRARIES "-L${SDL2_LIBDIR}  -lSDL2 ")

ar2015的答案是正确的,但没有必要修改sdl2-config.cmake

只需在target_link_libraries之前去除尾随空格:

string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

解决方案是编辑sdl2-config.cmake文件。

您可以通过命令找到此文件:

apt-file search sdl2-config

在 UbuntuUbuntu 16.04中,它位于

/usr/lib/x86_64-linux-gnu/cmake/SDL2/sdl2-config.cmake

在源文件中,

# sdl2 cmake project-config input for ./configure scripts
set(prefix "/usr") 
set(exec_prefix "${prefix}")
set(libdir "${prefix}/lib/x86_64-linux-gnu")
set(SDL2_PREFIX "/usr")
set(SDL2_EXEC_PREFIX "/usr")
set(SDL2_LIBDIR "${prefix}/lib/x86_64-linux-gnu")
set(SDL2_INCLUDE_DIRS "${prefix}/include/SDL2")
set(SDL2_LIBRARIES "-L${SDL2_LIBDIR}  -lSDL2 ")   <---- here

在最后一行中,有一个额外的空格应该被删除

BEFORE:    set(SDL2_LIBRARIES "-L${SDL2_LIBDIR}  -lSDL2 ")
AFTER :    set(SDL2_LIBRARIES "-L${SDL2_LIBDIR}  -lSDL2")

然后,问题为我解决了。