【问题标题】:CMake with cygwin " make[2]: *** No rule to make target 'cygwin' "CMake with cygwin "make[2]: *** No rule to make target 'cygwin'"
【发布时间】:2014-04-10 20:51:08
【问题描述】:

尝试在 Windows 上使用 cmake 在 cygwin 中编译项目时,我遇到了这个完全无法通过 Google 搜索的错误。

有问题的 CMakeLists.txt 文件是:

# Minimum cmake version (required)
cmake_minimum_required( VERSION 2.8.4 )

# Project name
project( sdlinterface )

# Find SDL2
include( FindPkgConfig )
pkg_search_module( SDL2 REQUIRED sdl2 )

set (PROJECT_INCLUDE_DIR 
    ${SDL2_INCLUDE_DIRS}    # SDL headers
    ${PROJECT_SOURCE_DIR}/include
)   

set (PROJECT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)

set(PROJECT_SRCS 
    ${PROJECT_SOURCE_DIR}/SDLMain.cpp
    ${PROJECT_SOURCE_DIR}/SDLWindow.cpp
    ${PROJECT_SOURCE_DIR}/SDLEventLoop.cpp
)

# Set the compiler flags (specifically the c++11 one)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

include_directories("${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_INCLUDE_DIR}")

add_library(${PROJECT_NAME} SHARED ${PROJECT_SRCS})
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)

# Link project with SDL
target_link_libraries(${PROJECT_NAME} 
    SDL2
)

任何想法为什么当我调用 make 时它试图编译一个 cygwin 目标?

完整的错误信息是

$ make
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxxx/Projects/sdlgame/Source/build
make[2]: *** No rule to make target 'cygwin', needed by 'cygsdlinterface.dll'.  Stop.
CMakeFiles/Makefile2:170: recipe for target 'Libraries/LEngine/sdlinterface/build/CMakeFiles/sdlinterface.dir/all' failed
make[1]: *** [Libraries/LEngine/sdlinterface/build/CMakeFiles/sdlinterface.dir/all] Error 2
Makefile:75: recipe for target 'all' failed
make: *** [all] Error 2

【问题讨论】:

    标签: c++ gcc makefile cmake cygwin


    【解决方案1】:

    也许不是解决方案,但至少有一些想法

    1. 使用“Unix Makefiles”生成器(你可能会这样做)
    2. 在初始化之前使用 PROJECT_SOURCE_DIR (PROJECT_INCLUDE_DIR)
    3. 您添加到 ADD_LIBRARY 的文件可能与 ${CMAKE_CURRENT_SOURCE_DIR} 路径相关,因此您无需明确指定
    4. 你可以用find_package(PkgConfig)代替include( FindPkgConfig )
    5. 使用${SDL2_LIBRARIES} 和${SDL2_LDFLAGS} 而不是target_link_libraries(... SDL2)

    【讨论】:

    • 感谢您的建议!不幸的是,这里没有解决这个问题。虽然我实际上并没有使用 Unix Makefiles 生成器,但我忘记了在 cygwin 环境中这是一个好主意。
    猜你喜欢
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2021-11-22
    • 2019-09-15
    • 2016-11-19
    • 1970-01-01
    • 2013-02-02
    相关资源
    最近更新 更多