Saya mencoba mengatur proyek dengan perpustakaan SDL2 menggunakan CMake. Ketika saya mengkompilasi untuk rilis semuanya berfungsi dengan baik. Namun saat menyetel tipe build ke kompilasi debug gagal dengan kesalahan berikut:

*** No rule to make target 'Lib/SDL2/libSDL2d.a', needed by '../Bin/Template'.  Stop. 

Sepertinya SDL2 menambahkan postfix untuk build debug dan itu mengacaukan segalanya.

Ini adalah CMakeLists.txt yang saya gunakan:

cmake_minimum_required(VERSION 3.2.0)

project(Template)

add_subdirectory(Lib/SDL2)

# C Standard
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED ON)

# compile with debug info
set(CMAKE_BUILD_TYPE Debug)

# output directories
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/Bin)

# build directory
set(CMAKE_BUILD_DIRECTORY ${CMAKE_SOURCE_DIR}/Build)

include_directories(
    Source
    Lib/SDL2/include
)

set(SOURCES 
    Source/main.c
)

add_executable(${PROJECT_NAME} ${SOURCES})

target_link_libraries(${PROJECT_NAME} SDL2-static)

Saya tidak ingin menggunakan find_packge dan memasukkan kode sumber SDL2 langsung ke proyek saya.

Apa yang perlu saya ubah agar dapat mengkompilasi untuk debug?

0
Eric 2 Juli 2020, 22:11

1 menjawab

Jawaban Terbaik

Kode SDL2 harus menambahkan postfix d ke nama pustaka bawaan saat CMAKE_BUILD_TYPE disetel ke Debug (lihat cuplikan kode SDL2 di sini). Apa yang tampaknya menjadi masalah di sini adalah penempatan baris:

set(CMAKE_BUILD_TYPE Debug)

Di file CMake Anda. Anda mungkin awalnya membangun ini dalam konfigurasi Rilis. Namun saat beralih ke Debug, perubahan tidak diterapkan ke SDL2 karena CMAKE_BUILD_TYPE disetel setelah melintasi direktori Lib/SDL2. Anda dapat memperbaikinya dengan memindahkan perintah set() sebelum panggilan ke add_subdirectory():

# Set the build type first!
set(CMAKE_BUILD_TYPE Debug)
add_subdirectory(Lib/SDL2)

Anda dapat menghindari masalah ini dengan menyetel konfigurasi build pada baris perintah, yang merupakan konvensi CMake yang lebih umum dan diterima:

cmake -DCMAKE_BUILD_TYPE=Debug ..
0
squareskittles 2 Juli 2020, 21:09