i use cmake build on windows, linux, , osx. on windows, use .dll , .lib files have prebuilt , put in folder project/windows/bin, project/windows/include, , project/windows/lib. these folders house third party dependencies windows. in cmakelists.txt, use:
if(win32) set(cmake_prefix_path ${project_source_dir}/windows) endif() find_package(sdl2 required) find_package(glew required)
it works able use 1 configuration of library. able link different configuration of library debug , release.
the question : how make when set visual studio project debug, use debug version of library , use release version of libray when set visual studio project release?
do need set /windows library directory differently?
thanks in advance
i'm sure, whether findsdl2
, findglew
modules use provide imported targets. if so, might pick respective library both debug , release , should use imported target linking.
otherwise, have 2 options:
explicitly use
optimized <lib1_release> debug <lib1_debug>
referenced @aichao in other question/answer:target_link_libraries(myconsumertarget public optimized <lib1_release> debug <lib1_debug>)
manually create imported library targets each external library , use them linking:
if(not target external::lib1) # if required subsequent runs of cmake add_library(external::lib1 shared imported global) set_target_properties(external::lib1 properties interface_include_directories "${project_source_dir}/windows/include" imported_link_interface_languages "c" imported_location_release "${project_source_dir}/windows/bin/<lib1_release>.dll" imported_implib_release "${project_source_dir}/windows/lib/<lib1_release_importlib>.lib" imported_location_debug "${project_source_dir}/windows/bin/<lib1_debug>.dll" imported_implib_debug "${project_source_dir}/windows/lib/<lib1_debug_importlib>.lib") endif() target_link_libraries(myconsumertarget public external::lib1)
personally, prefer latter less verbose in main cmakelists file. definition of different libraries can done in other files included via other means.
usually, have directory 3rdparty
in projects cmakelists.txt
file, pulls in external projects , defines such imported targets. in main cmake file can use these imported targets.
Comments
Post a Comment