代码之家  ›  专栏  ›  技术社区  ›  ar2015

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

  •  19
  • ar2015  · 技术社区  · 8 年前

    我正在关注 this question . 然而,我的 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 ")
    
    2 回复  |  直到 8 年前
        1
  •  12
  •   htiga    8 年前

    ar2015's answer 是正确的,但没有必要修改 sdl2-config.cmake .

    target_link_libraries

    string(STRIP ${SDL2_LIBRARIES} SDL2_LIBRARIES)
    
    target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})
    
        2
  •  7
  •   ar2015    8 年前

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

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

    apt-file search sdl2-config
    

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

    然后,问题为我解决了。