# Build \`ExternalProject\_Add\` always in \`Release\` mode

**URL:** <https://discourse.cmake.org/t/build-externalproject-add-always-in-release-mode/6088>\
**Category:** Code\
**Created:** [July 17, 2022, 10:01am UTC](https://discourse.cmake.org/t/build-externalproject-add-always-in-release-mode/6088 "2022-07-17T10:01:08Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kerim](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/k/6f9a4e/32.png) [@kerim](https://discourse.cmake.org/u/kerim)\
**Post date:** [July 17, 2022, 10:01am UTC](https://discourse.cmake.org/t/build-externalproject-add-always-in-release-mode/6088/1 "2022-07-17T10:01:08Z")

</div>

Hi,

I use superbuild to build my app.  
One of superbuild dependencies is GDAL. I wan’t it to be build always `Release` no matter what configuration my app is built (because it seems that GDAL doesn’t generates python bindings during `Debug` build, at least on Windows 11).

Here is the script that I use:

```cmake
  ExternalProject_Add(${proj}
    ${${proj}_EP_ARGS}
    GIT_REPOSITORY "${Slicer_${proj}_GIT_REPOSITORY}"
    GIT_TAG "${Slicer_${proj}_GIT_TAG}"
    SOURCE_DIR ${EP_SOURCE_DIR}
    BINARY_DIR ${EP_BINARY_DIR}
    INSTALL_DIR ${EP_INSTALL_DIR}
    CMAKE_CACHE_ARGS
      # CMake settings
      -DCMAKE_CXX_COMPILER:FILEPATH=${CMAKE_CXX_COMPILER}
      -DCMAKE_CXX_FLAGS:STRING=${ep_common_cxx_flags}
      -DCMAKE_C_COMPILER:FILEPATH=${CMAKE_C_COMPILER}
      -DCMAKE_C_FLAGS:STRING=${ep_common_c_flags}
      -DCMAKE_CXX_STANDARD:STRING=${CMAKE_CXX_STANDARD}
      -DCMAKE_CXX_STANDARD_REQUIRED:BOOL=${CMAKE_CXX_STANDARD_REQUIRED}
      -DCMAKE_CXX_EXTENSIONS:BOOL=${CMAKE_CXX_EXTENSIONS}
      -DADDITIONAL_C_FLAGS:STRING=${ADDITIONAL_C_FLAGS}
      -DADDITIONAL_CXX_FLAGS:STRING=${ADDITIONAL_CXX_FLAGS}
      -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
      # GDAL generates python bindings only in Release mode
      -DCMAKE_BUILD_TYPE:STRING=Release
      # GNUInstallDirs expands CMAKE_INSTALL_LIBDIR to 'lib' or to'lib64' depending on the OS
      -DCMAKE_INSTALL_LIBDIR:PATH=lib
      # Lib settings
      -DBUILD_TESTING:BOOL=OFF 
      -DZLIB_ROOT:PATH=${ZLIB_ROOT}
      -DPROJ_DIR:PATH=${PROJ_DIR}
      -DGEOS_DIR:PATH=${GEOS_DIR}
      -DHDF5_ROOT:PATH=${HDF5_ROOT}
      -DSQLite3_INCLUDE_DIR:PATH=${sqlite_INCLUDE_DIR}
      -DSQLite3_LIBRARY:FILEPATH=${sqlite_LIBRARY}
      -DSQLite3_HAS_RTREE:BOOL=ON 
      -DSQLite3_HAS_COLUMN_METADATA:BOOL=ON 
      # GDAL uses CMAKE's findPython (Python_EXECUTABLE) while h5gt and h5geo use pybind11 (PYTHON_EXECUTABLE)
      -DPython_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
      # GDAL sets props to OpenSSL::Crypto with incorrect INCLUDE_DIRS
      -DGDAL_USE_OPENSSL:BOOL=OFF
    DEPENDS
      ${${proj}_DEPENDENCIES}
    # GDAL compiles python bindings only in Release mode (at least on Windows) (THIS APPROACH DOESN'T WOTK)
    BUILD_COMMAND 
      ${CMAKE_COMMAND} --build ${EP_BINARY_DIR} --config Release
    )

```

As you can see I pass `-DCMAKE_BUILD_TYPE:STRING=Release` and the build command `${CMAKE_COMMAND} --build ${EP_BINARY_DIR} --config Release` but nevertheless it is built in `Debug` config.

To configure and build my app I use the commands:

```cmake
cmake .. -G "Visual Studio 17 2022" -A x64 -DQt5_DIR:PATH=C:\Qt\5.15.2\msvc2019_64\lib\cmake\Qt5
cmake --build . --config Debug -j8

```

Is there any preferred ways to solve my issue?

Windows 11

---

<div class="post-metadata">

**Author:** ![kerim](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/k/6f9a4e/32.png) [@kerim](https://discourse.cmake.org/u/kerim)\
**Post date:** [July 17, 2022, 11:00am UTC](https://discourse.cmake.org/t/build-externalproject-add-always-in-release-mode/6088/2 "2022-07-17T11:00:29Z")

</div>

Oh, it seems I had to add `INSTALL_COMMAND` to `ExternalProject_Add` as well:

```cmake
    INSTALL_COMMAND
      ${CMAKE_COMMAND} --install ${EP_BINARY_DIR} --config Release

```
