2017-08-17 255 views
5

我正在關注this question。但是我cmake面孔出現錯誤:cmake:前導空白或尾隨空白(策略CMP0004)

-- 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 ") 
+2

這看起來像是SDL2提供的軟件包配置文件中的一個問題(但我沒有使用SDL2,所以我無法評論更多)。 – Angew

+1

應該有SDL2安裝附帶的'sdl2-config.cmake'文件(它可能是'libsdl2-dev'軟件包的一部分)。向我們顯示此文件的內容。如果它看起來像這樣:https://github.com/xerpi/SDL-Vita/blob/master/sdl2-config.cmake.in(* SD2_LIBRARIES *變量的內容被括在雙引號中),那麼錯誤是可以理解的。快速修復可能會刪除這些雙引號。 – Tsyvarev

+0

@Tsyvarev,已更新。 – ar2015

回答

0

解決方法是編輯sdl2-config.cmake文件。

你可以找到通過命令這個文件:

apt-file search sdl2-config 

在Ubuntu中Ubuntu 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") 

然後,問題修復了我。