Using CMake to Set Output Directory for Binaries

What Will You Learn?

In this tutorial, you will master the art of using CMake to precisely designate the output directory for compiled binaries. By customizing this essential aspect, you can efficiently organize your project’s executable files in a structured manner.

Introduction to the Problem and Solution

When developing projects with CMake, it is crucial to have control over where the compiled executable files are stored. By default, CMake places these binaries in the project’s build directory. However, for better project management and organization, it is often preferred to have them neatly arranged in a separate bin directory within the project structure.

To address this need, we need to tweak our CMake configuration so that it guides the compiled binaries to a specific output location like a bin folder.


# Define the output binary directory as 'bin'

# Copyright PHD

Note: If you prefer relative placement from your project’s source directory, substitute ${CMAKE_BINARY_DIR} with ${PROJECT_BINARY_DIR}.

[//] # For more Python-related assistance, visit


By setting CMAKE_RUNTIME_OUTPUT_DIRECTORY, we instruct CMake on where to store executables after compilation. This ensures that all built binaries are placed in the specified bin directory rather than cluttering the build folder. Such organization contributes to a cleaner project structure and facilitates better management.

    1. How can I change the name of my output binary file? You can use SET_TARGET_PROPERTIES(target PROPERTIES OUTPUT_NAME newname) with your target executable name and customize it accordingly.

    2. Is it possible to have different output directories based on build types (Debug/Release)? Yes, by employing generator expressions like $<CONFIG>, you can tailor output locations based on different configurations.

    3. Does changing the output directory affect how my program runs or links libraries? No, altering the output directory solely impacts where final executable files are stored post-compilation; runtime behavior remains unaffected.

    4. Can I set different output directories for different targets in my CMakeLists.txt file? Absolutely! You can utilize multiple instances of set_target_properties() or conditionally define paths based on target names or properties.

    5. Will changing this setting impact any other parts of my build process? No, modifying output directories solely alters where final binaries are stored; all other build actions remain consistent.

    6. How do I revert back to default behavior if needed? Simply remove or comment out your custom set(CMAKE_RUNTIME_OUTPUT_DIRECTORY …) line from your CMakeLists.txt file.

    7. Can I create subdirectories within my bin folder for better organization? Certainly! Extend your path like so:

    8. # Copyright PHD

    9. Are there predefined variables available for common locations like binaries or libraries? Yes, variables such as ${CMAKE_CURRENT_BINARY_DIR} offer convenient references without manual path specification.

    10. Do changes made here persist between builds or across platforms? Yes, once defined in your CMakeLists.txt, these directives apply consistently regardless of platform disparities during subsequent builds.

    11. How does specifying an output directory align with best practices in software development? It promotes clean separation between source code and generated artifacts while adhering to standard conventions that enhance project maintainability and collaboration efficiency.


Mastering how to manipulate compiled binary storage locations through CMake empowers you with effective project organization capabilities. Understanding output directories, their customization features, and implications on workflow management and execution environments elevate your development proficiency significantly.

Leave a Comment