A bit harder question:

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

A bit harder question:

Steven Truppe
#---------------------------------------------------------------------------------------------------------------------------------------------
# This is the start
#---------------------------------------------------------------------------------------------------------------------------------------------

################
## bsBuildLibs ##
#################
macro(bsBuildLibs)
     foreach(lib ${ARGN})
         bsIncludeLib(${lib})
         bsGetLibExamples(${lib})
         bsIncludeLibExamples(${lib})
     endforeach()
endmacro()

##################
## bsIncludeLib ##
##################
macro(bsIncludeLib)
     set(fn "${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${ARGV0}.cmake")
     if(EXISTS ${fn})
         include(lib_${ARGV0})
     else()
         message(FATAL_ERROR "Unable to find library configuration file:
${lib_${ARGV0}}!")
     endif()
endmacro()

######################
## bsGetLibExamples ##
######################
macro(bsGetLibExamples)
     string(TOUPPER ${lib} lib_upper)
     set(WITH_LIB_${lib_upper}_EXAMPLES "")
     # get all examples
     get_cmake_property(_vars VARIABLES)
     foreach(_var ${_vars})
         string(TOUPPER ${lib} lib_upper)
         if(_var MATCHES "^WITH_LIB_${lib_upper}_EXAMPLE_([A-Za-z]+)$")
             list(APPEND WITH_LIB_${lib_upper}_EXAMPLES ${CMAKE_MATCH_1})
         endif()
     endforeach()
endmacro()

###########################
## bsIncludeLibsExamples ##
###########################
macro(bsIncludeLibExamples)
     foreach(lib ${ARGN})
         string(TOUPPER ${lib} lib_upper)
         if(DEFINED "WITH_LIB_${lib_upper}_EXAMPLES")
             foreach(example IN LISTS WITH_LIB_${lib_upper}_EXAMPLES)
                 string(TOLOWER ${example} example_lower)
                 set(fn
"${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${lib}_example_${example_lower}.cmake")
                 set(lib_name "lib_${lib}_example_${example_lower}")
                 if(EXISTS ${fn})
                     message(STATUS "Bulding lib ${lib}, example:
${example}")
                     include(${lib_name})
                 else()
                     message(FATAL_ERROR "Could not find example file
${fn} for library ${lib} and (example: ${example_lower})!")
                 endif()
             endforeach()
         endif()
     endforeach()
endmacro()





########################################
## FIRST FILE I INCLUDE with inclde() ##
########################################

set(ALL_LIBS "glad;glfw")

set(WITH_LIB_GLAD 1)
set(WITH_LIB_GLAD_EXAMPLE_CBASIC 1)

set(WITH_LIB_GLFW 1)
set(WITH_LIB_GLFW_EXAMPLE_CBASIC 1)
set(WITH_LIB_GLFW_EXAMPLE_CPPBASIC 1)

bsBuildLibs(${ALL_LIBS})

---------------------------------------------------------------------------------------------------------------------------------------------

if turns into loading different files that are part of the compilation:
- First the ALL_LIBS list get looped and all examples for the libraries
are filtered out
- i then i have one example .cmake file for every example with the same
name sheme as you see at the first set() lines like
WITH_LIB_GLAD_EXAMPLE_CBASIC -
  this file is included and there should the build process be
acompilshed (the filename here would be lib_glad_example_cbasic.c).

Here is an example if lib_glad.cmake.

---------------------------------------------------------------------------------------------------------------------------------------------


IF(WITH_LIB_GLAD)
     ###################
     ## first example ##
     ###################
     find_package(OpenGL REQUIRED)
     find_package(X11 REQUIRED)
     find_package(Threads REQUIRED)

     set(LIB_GLAD_INC_PATH
         ${OUTPUT_PATH}/glad/include
         ${OPENGL_INCLUDE_DIR}
         ${X11_INCLUDE_DIR}
     )

     set(LIB_GLAD_LIB_PATH
         ${OUTPUT_PATH}/glad/lib
         ${OPENGL_LIBRARIES}
         ${X11_LIBRARIES}
     )

     set(LIB_GLAD_STATIC_LIBS
         glad
         m
         rt
         ${CMAKE_DL_LIBS}
         OpenGL::GL
         Threads::Threads
         X11::X11
         X11::Xxf86vm
         X11::Xi
         X11::Xrandr
         X11::Xcursor
         X11::Xinerama
     )

     cmake_print_variables(OUTPUT_PATH)
     ExternalProject_Add(external_glad
         PREFIX ${CMAKE_BINARY_DIR}/glad-log
         GIT_REPOSITORY ${GLAD_REPO}
         GIT_TAG ${GLAD_TAG}
         GIT_PROGRESS true
         GIT_SHALLOW True
         SOURCE_DIR ${CMAKE_BINARY_DIR}/glad
         UPDATE_COMMAND ""
         PATCH_COMMAND ""
         INSTALL_DIR ${CMAKE_BINARY_DIR}/glad
         CMAKE_ARGS -DCMAKE_BUILD_TYPE:String=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX=${OUTPUT_PATH}/glad -DGLAD_INSTALL=True
         #CONFIGURE_COMMAND ""
         INSTALL_COMMAND ""
     )

ENDIF()

###########################
## second file i include ##
###########################
IF(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)

     add_executable(LIB_GLAD_EXAMPLE_CBASIC ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})

     cmake_print_variables(LIB_GLAD_INC_PATH)
     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_INC_PATH})
     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_LIB_PATH})
     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_STATIC_LIBS})

     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})

     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
     install(
         TARGETS LIB_GLAD_EXAMPLE_CBASIC
         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
     )


ENDIF()

and here is the example build file lib_glad_example_cbasic.cmake:

# i tried to remove the IF but it's the same result

if(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)

     message(STATUS "---> Building example WITH_LIB_GLAD_EXAMPLE_CBASIC")

     add_executable(LIB_GLAD_EXAMPLE_CBASIC ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})

     cmake_print_variables(LIB_GLAD_INC_PATH)
     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_INC_PATH})
     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_LIB_PATH})
     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
${LIB_GLAD_STATIC_LIBS})

     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})

     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
     install(
         TARGETS LIB_GLAD_EXAMPLE_CBASIC
         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
     )
ENDIF()


---------------------------------------------------------------------------------------------------------------------------------------------

Now my problem is that the variable CMAKE_BUILD_TYPE automaticaly is set
to debug but i'm using cmake 3.14 with the line:

# avoid having empty buildtype
IF(NOT DEFINED CMAKE_BUILD_TYPE)
     set(CMAKE_BUILD_TYPE Release CACHE STRING "The build type of the
project. (default:Release)")
ENDIF()

and the build_tool directory from the ExternalProject_Add is never
installed but it is tried to compile the example file. It worked before
i'm confused
that something because of the order of how things are working is making
me trouble.

I hope someone can help me out here, it would be the rest work of the
puzzle to make things work uniquely for my libs and their examples.

best regrads!

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: A bit harder question:

Steven Truppe
It's also odd that i have to include(ExternalProject) to use the command
but i'm on cmake version 3.14 ...

On 06.06.19 16:51, Steven Truppe wrote:

> #---------------------------------------------------------------------------------------------------------------------------------------------
>
> # This is the start
> #---------------------------------------------------------------------------------------------------------------------------------------------
>
>
> ################
> ## bsBuildLibs ##
> #################
> macro(bsBuildLibs)
>     foreach(lib ${ARGN})
>         bsIncludeLib(${lib})
>         bsGetLibExamples(${lib})
>         bsIncludeLibExamples(${lib})
>     endforeach()
> endmacro()
>
> ##################
> ## bsIncludeLib ##
> ##################
> macro(bsIncludeLib)
>     set(fn "${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${ARGV0}.cmake")
>     if(EXISTS ${fn})
>         include(lib_${ARGV0})
>     else()
>         message(FATAL_ERROR "Unable to find library configuration file:
> ${lib_${ARGV0}}!")
>     endif()
> endmacro()
>
> ######################
> ## bsGetLibExamples ##
> ######################
> macro(bsGetLibExamples)
>     string(TOUPPER ${lib} lib_upper)
>     set(WITH_LIB_${lib_upper}_EXAMPLES "")
>     # get all examples
>     get_cmake_property(_vars VARIABLES)
>     foreach(_var ${_vars})
>         string(TOUPPER ${lib} lib_upper)
>         if(_var MATCHES "^WITH_LIB_${lib_upper}_EXAMPLE_([A-Za-z]+)$")
>             list(APPEND WITH_LIB_${lib_upper}_EXAMPLES ${CMAKE_MATCH_1})
>         endif()
>     endforeach()
> endmacro()
>
> ###########################
> ## bsIncludeLibsExamples ##
> ###########################
> macro(bsIncludeLibExamples)
>     foreach(lib ${ARGN})
>         string(TOUPPER ${lib} lib_upper)
>         if(DEFINED "WITH_LIB_${lib_upper}_EXAMPLES")
>             foreach(example IN LISTS WITH_LIB_${lib_upper}_EXAMPLES)
>                 string(TOLOWER ${example} example_lower)
>                 set(fn
> "${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${lib}_example_${example_lower}.cmake")
>
>                 set(lib_name "lib_${lib}_example_${example_lower}")
>                 if(EXISTS ${fn})
>                     message(STATUS "Bulding lib ${lib}, example:
> ${example}")
>                     include(${lib_name})
>                 else()
>                     message(FATAL_ERROR "Could not find example file
> ${fn} for library ${lib} and (example: ${example_lower})!")
>                 endif()
>             endforeach()
>         endif()
>     endforeach()
> endmacro()
>
>
>
>
>
> ########################################
> ## FIRST FILE I INCLUDE with inclde() ##
> ########################################
>
> set(ALL_LIBS "glad;glfw")
>
> set(WITH_LIB_GLAD 1)
> set(WITH_LIB_GLAD_EXAMPLE_CBASIC 1)
>
> set(WITH_LIB_GLFW 1)
> set(WITH_LIB_GLFW_EXAMPLE_CBASIC 1)
> set(WITH_LIB_GLFW_EXAMPLE_CPPBASIC 1)
>
> bsBuildLibs(${ALL_LIBS})
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>
> if turns into loading different files that are part of the compilation:
> - First the ALL_LIBS list get looped and all examples for the libraries
> are filtered out
> - i then i have one example .cmake file for every example with the same
> name sheme as you see at the first set() lines like
> WITH_LIB_GLAD_EXAMPLE_CBASIC -
>  this file is included and there should the build process be
> acompilshed (the filename here would be lib_glad_example_cbasic.c).
>
> Here is an example if lib_glad.cmake.
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>
>
> IF(WITH_LIB_GLAD)
>     ###################
>     ## first example ##
>     ###################
>     find_package(OpenGL REQUIRED)
>     find_package(X11 REQUIRED)
>     find_package(Threads REQUIRED)
>
>     set(LIB_GLAD_INC_PATH
>         ${OUTPUT_PATH}/glad/include
>         ${OPENGL_INCLUDE_DIR}
>         ${X11_INCLUDE_DIR}
>     )
>
>     set(LIB_GLAD_LIB_PATH
>         ${OUTPUT_PATH}/glad/lib
>         ${OPENGL_LIBRARIES}
>         ${X11_LIBRARIES}
>     )
>
>     set(LIB_GLAD_STATIC_LIBS
>         glad
>         m
>         rt
>         ${CMAKE_DL_LIBS}
>         OpenGL::GL
>         Threads::Threads
>         X11::X11
>         X11::Xxf86vm
>         X11::Xi
>         X11::Xrandr
>         X11::Xcursor
>         X11::Xinerama
>     )
>
>     cmake_print_variables(OUTPUT_PATH)
>     ExternalProject_Add(external_glad
>         PREFIX ${CMAKE_BINARY_DIR}/glad-log
>         GIT_REPOSITORY ${GLAD_REPO}
>         GIT_TAG ${GLAD_TAG}
>         GIT_PROGRESS true
>         GIT_SHALLOW True
>         SOURCE_DIR ${CMAKE_BINARY_DIR}/glad
>         UPDATE_COMMAND ""
>         PATCH_COMMAND ""
>         INSTALL_DIR ${CMAKE_BINARY_DIR}/glad
>         CMAKE_ARGS -DCMAKE_BUILD_TYPE:String=${CMAKE_BUILD_TYPE}
> -DCMAKE_INSTALL_PREFIX=${OUTPUT_PATH}/glad -DGLAD_INSTALL=True
>         #CONFIGURE_COMMAND ""
>         INSTALL_COMMAND ""
>     )
>
> ENDIF()
>
> ###########################
> ## second file i include ##
> ###########################
> IF(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)
>
>     add_executable(LIB_GLAD_EXAMPLE_CBASIC
> ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
>     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})
>
>     cmake_print_variables(LIB_GLAD_INC_PATH)
>     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_INC_PATH})
>     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_LIB_PATH})
>     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_STATIC_LIBS})
>
>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})
>
>     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
> OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
> OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
>     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
> ${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
>     install(
>         TARGETS LIB_GLAD_EXAMPLE_CBASIC
>         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
>     )
>
>
> ENDIF()
>
> and here is the example build file lib_glad_example_cbasic.cmake:
>
> # i tried to remove the IF but it's the same result
>
> if(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)
>
>     message(STATUS "---> Building example WITH_LIB_GLAD_EXAMPLE_CBASIC")
>
>     add_executable(LIB_GLAD_EXAMPLE_CBASIC
> ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
>     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})
>
>     cmake_print_variables(LIB_GLAD_INC_PATH)
>     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_INC_PATH})
>     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_LIB_PATH})
>     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
> ${LIB_GLAD_STATIC_LIBS})
>
>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})
>
>     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
> OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
> OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
>     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
> ${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
>     install(
>         TARGETS LIB_GLAD_EXAMPLE_CBASIC
>         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
>     )
> ENDIF()
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>
> Now my problem is that the variable CMAKE_BUILD_TYPE automaticaly is set
> to debug but i'm using cmake 3.14 with the line:
>
> # avoid having empty buildtype
> IF(NOT DEFINED CMAKE_BUILD_TYPE)
>     set(CMAKE_BUILD_TYPE Release CACHE STRING "The build type of the
> project. (default:Release)")
> ENDIF()
>
> and the build_tool directory from the ExternalProject_Add is never
> installed but it is tried to compile the example file. It worked before
> i'm confused
> that something because of the order of how things are working is making
> me trouble.
>
> I hope someone can help me out here, it would be the rest work of the
> puzzle to make things work uniquely for my libs and their examples.
>
> best regrads!
>
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: A bit harder question:

Steven Truppe
I made a few misakes

On 06.06.19 16:54, Steven Truppe wrote:

> It's also odd that i have to include(ExternalProject) to use the command
> but i'm on cmake version 3.14 ...
>
> On 06.06.19 16:51, Steven Truppe wrote:
>> #---------------------------------------------------------------------------------------------------------------------------------------------
>>
>>
>> # This is the start
>> #---------------------------------------------------------------------------------------------------------------------------------------------
>>
>>
>>
>> ################
>> ## bsBuildLibs ##
>> #################
>> macro(bsBuildLibs)
>>     foreach(lib ${ARGN})
>>         bsIncludeLib(${lib})
>>         bsGetLibExamples(${lib})
>>         bsIncludeLibExamples(${lib})
>>     endforeach()
>> endmacro()
>>
>> ##################
>> ## bsIncludeLib ##
>> ##################
>> macro(bsIncludeLib)
>>     set(fn "${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${ARGV0}.cmake")
>>     if(EXISTS ${fn})
>>         include(lib_${ARGV0})
>>     else()
>>         message(FATAL_ERROR "Unable to find library configuration file:
>> ${lib_${ARGV0}}!")
>>     endif()
>> endmacro()
>>
>> ######################
>> ## bsGetLibExamples ##
>> ######################
>> macro(bsGetLibExamples)
>>     string(TOUPPER ${lib} lib_upper)
>>     set(WITH_LIB_${lib_upper}_EXAMPLES "")
>>     # get all examples
>>     get_cmake_property(_vars VARIABLES)
>>     foreach(_var ${_vars})
>>         string(TOUPPER ${lib} lib_upper)
>>         if(_var MATCHES "^WITH_LIB_${lib_upper}_EXAMPLE_([A-Za-z]+)$")
>>             list(APPEND WITH_LIB_${lib_upper}_EXAMPLES ${CMAKE_MATCH_1})
>>         endif()
>>     endforeach()
>> endmacro()
>>
>> ###########################
>> ## bsIncludeLibsExamples ##
>> ###########################
>> macro(bsIncludeLibExamples)
>>     foreach(lib ${ARGN})
>>         string(TOUPPER ${lib} lib_upper)
>>         if(DEFINED "WITH_LIB_${lib_upper}_EXAMPLES")
>>             foreach(example IN LISTS WITH_LIB_${lib_upper}_EXAMPLES)
>>                 string(TOLOWER ${example} example_lower)
>>                 set(fn
>> "${CMAKE_SOURCE_DIR}/tools/cmake/modules/lib_${lib}_example_${example_lower}.cmake")
>>
>>
>>                 set(lib_name "lib_${lib}_example_${example_lower}")
>>                 if(EXISTS ${fn})
>>                     message(STATUS "Bulding lib ${lib}, example:
>> ${example}")
>>                     include(${lib_name})
>>                 else()
>>                     message(FATAL_ERROR "Could not find example file
>> ${fn} for library ${lib} and (example: ${example_lower})!")
>>                 endif()
>>             endforeach()
>>         endif()
>>     endforeach()
>> endmacro()
>>
>>
>>
>> set(ALL_LIBS "glad;glfw")
>>
>> set(WITH_LIB_GLAD 1)
>> set(WITH_LIB_GLAD_EXAMPLE_CBASIC 1)
>>
>> set(WITH_LIB_GLFW 1)
>> set(WITH_LIB_GLFW_EXAMPLE_CBASIC 1)
>> set(WITH_LIB_GLFW_EXAMPLE_CPPBASIC 1)
>>
>> bsBuildLibs(${ALL_LIBS})
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------
>>
>>
>>
>> If turns into loading different files that are part of the compilation:
>> - First the ALL_LIBS list get looped and all examples for the libraries
>> are filtered out
>> - i then i have one example .cmake file for every example with the same
>> name sheme as you see at the first set() lines like .

so 2 files: one with the ExternalExample_Add() command and one for the
build process -

in this example we have lib_glad.inc that is included first and the
lib_glad_example_cbasic.cmake file for building an example.

>> WITH_LIB_GLAD_EXAMPLE_CBASIC -
>>  this file is included and there should the build process be
>> acompilshed (the filename here would be lib_glad_example_cbasic.c).
>>
>> Here is an example if lib_glad.cmake.
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------
>>
>> (lib_glad.cmake)
>>
>>
>> IF(WITH_LIB_GLAD)
>>     ###################
>>     ## first example ##
>>     ###################
>>     find_package(OpenGL REQUIRED)
>>     find_package(X11 REQUIRED)
>>     find_package(Threads REQUIRED)
>>
>>     set(LIB_GLAD_INC_PATH
>>         ${OUTPUT_PATH}/glad/include
>>         ${OPENGL_INCLUDE_DIR}
>>         ${X11_INCLUDE_DIR}
>>     )
>>
>>     set(LIB_GLAD_LIB_PATH
>>         ${OUTPUT_PATH}/glad/lib
>>         ${OPENGL_LIBRARIES}
>>         ${X11_LIBRARIES}
>>     )
>>
>>     set(LIB_GLAD_STATIC_LIBS
>>         glad
>>         m
>>         rt
>>         ${CMAKE_DL_LIBS}
>>         OpenGL::GL
>>         Threads::Threads
>>         X11::X11
>>         X11::Xxf86vm
>>         X11::Xi
>>         X11::Xrandr
>>         X11::Xcursor
>>         X11::Xinerama
>>     )
>>
>>     cmake_print_variables(OUTPUT_PATH)
>>     ExternalProject_Add(external_glad
>>         PREFIX ${CMAKE_BINARY_DIR}/glad-log
>>         GIT_REPOSITORY ${GLAD_REPO}
>>         GIT_TAG ${GLAD_TAG}
>>         GIT_PROGRESS true
>>         GIT_SHALLOW True
>>         SOURCE_DIR ${CMAKE_BINARY_DIR}/glad
>>         UPDATE_COMMAND ""
>>         PATCH_COMMAND ""
>>         INSTALL_DIR ${CMAKE_BINARY_DIR}/glad
>>         CMAKE_ARGS -DCMAKE_BUILD_TYPE:String=${CMAKE_BUILD_TYPE}
>> -DCMAKE_INSTALL_PREFIX=${OUTPUT_PATH}/glad -DGLAD_INSTALL=True
>>         #CONFIGURE_COMMAND ""
>>         INSTALL_COMMAND ""
>>     )
>>
>> ENDIF()
>>
>>
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------
>>

lib_glad_example_cbasic.cmake

second file included

>> IF(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)
>>
>>     add_executable(LIB_GLAD_EXAMPLE_CBASIC
>> ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
>>     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})
>>
>>     cmake_print_variables(LIB_GLAD_INC_PATH)
>>     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_INC_PATH})
>>     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_LIB_PATH})
>>     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_STATIC_LIBS})
>>
>>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
>> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
>>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
>> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})
>>
>>     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
>>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
>> OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
>>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
>> OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
>>     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
>> ${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
>>     install(
>>         TARGETS LIB_GLAD_EXAMPLE_CBASIC
>>         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
>>     )
>>
>>
>> ENDIF()
>>
>> and here is the example build file lib_glad_example_cbasic.cmake:
>>
>> # i tried to remove the IF but it's the same result
>>
>> if(WITH_LIB_GLAD AND WITH_LIB_GLAD_EXAMPLE_CBASIC)
>>
>>     message(STATUS "---> Building example WITH_LIB_GLAD_EXAMPLE_CBASIC")
>>
>>     add_executable(LIB_GLAD_EXAMPLE_CBASIC
>> ${LIB_GLAD_EXAMPLE_CBASIC_SRC})
>>     set(CMAKE_C_COMPILER ${LIB_GLAD_EXAMPLE_CBASIC_COMPILER})
>>
>>     cmake_print_variables(LIB_GLAD_INC_PATH)
>>     target_include_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_INC_PATH})
>>     target_link_directories(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_LIB_PATH})
>>     target_link_libraries(LIB_GLAD_EXAMPLE_CBASIC PRIVATE
>> ${LIB_GLAD_STATIC_LIBS})
>>
>>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG
>> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_DEBUG})
>>     set(LIB_GLAD_EXAMPLE_CBASIC_C_FALGS_RELEASE
>> ${LIB_GLAD_EXAMPLE_CBASIC_C_FLAGS_RELEASE})
>>
>>     cmake_print_variables(LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH)
>>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
>> OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE})
>>     set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
>> OUTPUT_NAME_DEBUG ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_DEBUG})
>>     add_dependencies(LIB_GLAD_EXAMPLE_CBASIC
>> ${LIB_GLAD_EXAMPLE_CBASIC_DEPS})
>>     install(
>>         TARGETS LIB_GLAD_EXAMPLE_CBASIC
>>         RUNTIME DESTINATION ${LIB_GLAD_EXAMPLE_CBASIC_INSTALL_PATH}
>>     )
>> ENDIF()
>>
>>
>> ---------------------------------------------------------------------------------------------------------------------------------------------
>>
>>
>>
>> Now my problem is that the variable CMAKE_BUILD_TYPE automaticaly is set
>> to debug but i'm using cmake 3.14 with the line:
>>
>> # avoid having empty buildtype
>> IF(NOT DEFINED CMAKE_BUILD_TYPE)
>>     set(CMAKE_BUILD_TYPE Release CACHE STRING "The build type of the
>> project. (default:Release)")
>> ENDIF()
>>
>> and the build_tool directory from the ExternalProject_Add is never
>> installed but it is tried to compile the example file. It worked before
>> i'm confused
>> that something because of the order of how things are working is making
>> me trouble.
>>
>> I hope someone can help me out here, it would be the rest work of the
>> puzzle to make things work uniquely for my libs and their examples.
>>
>> best regrads!
>>
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Strange properties issue

Steven Truppe
Hi again,

i solved most of the problems, i have a single issue left: i have two
files, in one file i do:

set(WITH_LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE "demo")

and in the next file i include i have:

set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
OUTPUT_NAME_RELEASE ${LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE}) .

And as a result after make install i get:

-- Set runtime path of
"/media/stuv/linux-projects/programming/bsEdit/build_files/Debug/examples/glad_basic/LIB_GLAD_EXAMPLE_CBASIC"
to ""

And the filename of the build file is LIB_GLAD_EXAMPLE_CBASIC ...


best regards.


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Strange properties issue

Steven Truppe

On 06.06.19 19:37, Steven Truppe wrote:

> Hi again,
>
> i solved most of the problems, i have a single issue left: i have two
> files, in one file i do:
>
> set(WITH_LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE "demo")
>
> and in the next file i include i have:
>
> set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
> OUTPUT_NAME_RELEASE
> ${WITH_LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE}) .
>
> And as a result after make install i get:
>
> -- Set runtime path of
> "/media/stuv/linux-projects/programming/bsEdit/build_files/Debug/examples/glad_basic/LIB_GLAD_EXAMPLE_CBASIC"
>
> to ""
>
> And the filename of the build file is LIB_GLAD_EXAMPLE_CBASIC ...
>
>
> best regards.
>
>
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: Strange properties issue

Steven Truppe
I missed the property - it's DEBUG_OUTPUT_NAME and RELEASE_OUTPUT_NAME,
sry..

On 06.06.19 19:51, Steven Truppe wrote:

>
> On 06.06.19 19:37, Steven Truppe wrote:
>> Hi again,
>>
>> i solved most of the problems, i have a single issue left: i have two
>> files, in one file i do:
>>
>> set(WITH_LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE "demo")
>>
>> and in the next file i include i have:
>>
>> set_target_properties(LIB_GLAD_EXAMPLE_CBASIC PROPERTIES
>> OUTPUT_NAME_RELEASE
>> ${WITH_LIB_GLAD_EXAMPLE_CBASIC_OUTPUT_NAME_RELEASE}) .
>>
>> And as a result after make install i get:
>>
>> -- Set runtime path of
>> "/media/stuv/linux-projects/programming/bsEdit/build_files/Debug/examples/glad_basic/LIB_GLAD_EXAMPLE_CBASIC"
>>
>>
>> to ""
>>
>> And the filename of the build file is LIB_GLAD_EXAMPLE_CBASIC ...
>>
>>
>> best regards.
>>
>>
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake