web-dev-qa-db-ja.com

cmake:先頭または末尾の空白(ポリシーCMP0004)

私はフォローしています この質問 。しかし、私の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 ")
18
ar2015

解決策は、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")

その後、問題は解決しました。

7
ar2015

ar2015の答え は正しいですが、sdl2-config.cmakeを変更する必要はありません。

target_link_librariesの前の末尾のスペースを削除するだけです:

string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES)

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
8
htiga