Cmake clang ninja windows

When working with CMake, Ninja, and clang-cl in a Windows environment, users often encounter challenges related to flag misconfiguration and linker issues. This comprehensive guide will provide solutions to these common problems, enabling you to streamline your build process efficiently using CMake version 3.20 or higher.

Setting Up Your Clang-cl Environment

CMake, a cross-platform build system, offers the flexibility to specify different compiler toolchains, including Clang’s clang-cl, which is designed to be compatible with Microsoft’s cl.exe. However, translating CMake’s configuration settings into the expected compiler flags for Windows can sometimes lead to unexpected results, particularly when your configurations end up using Linux-style options.

The Initial Setup

If your CMakeLists.txt is configured as follows:

set(CMAKE_C_COMPILER clang-cl)
set(CMAKE_CXX_COMPILER clang-cl)

Your toolchain file effectively chooses Clang’s Windows toolchain expected to replicate cl.exe‘s behavior. This setup assumes you have LLVM’s Clang installed and properly configured within your system’s PATH.

Common Issues with Compiler Flags

Users often discover that CMake defaults to Unix-style flags rather than using the Windows equivalents. For instance, when compiling with C++17 standards or including preprocessor definitions, the flags should ideally appear as:

  • Expected (Windows): /std:c++17 and /D HAVE_FOO=1
  • Unexpected (Unix-like): -std=c++17 and -DHAVE_FOO=1

Diagnosing Flag Mismatches

The most common cause for clang-cl using Linux-style flags is misconfigured CMake system variables. Ensure that:

  1. CMake System Name is Specified Correctly:

    • Set CMAKE_SYSTEM_NAME to «Windows» to inform CMake that it should target a Windows environment.
  2. Use Presets:

    • Utilize CMake’s presets to define your toolchain settings consistently across environments.
  3. Toolchain Checking:

    • Double-check the active VS Developer Command Prompt for PowerShell—often, not activating the correct environment will lead to configuration issues.

Linker Errors and Solutions

After resolving the flag issues, CMake users frequently encounter linker errors due to undefined entry symbols, such as:

lld-link: error: <root>: undefined symbol: mainCRTStartup

Troubleshooting Tips:

  1. Check for Runtime Misconfigurations:

    • Misconfigured or missing runtime libraries can cause this error. Check for correct -MDd or /MDd usage.
    • Ensure your project either directly includes or correctly links required runtime libraries.
  2. Select the Correct Clang Version:

    • If specifying clang resolves the issue, but you prefer clang-cl as a cl.exe substitute, ensure proper compatibility by checking the configurations supplied by the installed LLVM tools.
  3. Activate Proper Developer Environment:

    • Always start the Visual Studio command prompt (Developer Command Prompt for VS) before configuring or building with CMake.

These proactive measures, when done methodically and comprehensively, ensure seamless integration of CMake with modern C++ standards on the Windows platform while using the powerful tools provided by LLVM.

Conclusion

Transitioning to clang-cl from cl.exe with CMake and Ninja can streamline cross-platform development and benefit from the advanced features offered by LLVM’s Clang. By configuring your environment properly and ensuring the correct interpretations of flags and linkers, you significantly reduce build errors, leading to a more efficient development process. If problems persist, consider revisiting your CMake configurations or consult CMake’s official documentation and community forums for advanced troubleshooting.

Setting up the development for C++ (and C) is hard. Especially for beginners, even when you are coming from other languages.
I use windows, which can complicates things even further.

I could use Visual Studio, which would probably make my life easier, but I refuse to.

In this post I am going to share how I managed to finally create a development environment for C++ on windows which I am satisfied with.

1. Compiler

First we need a compiler that works on windows. Traditionally to do this, I used the mingw64 gcc tools. However setting up mingw can be rather complicated and confusing.

Since then, I’ve discovered clang. The clang compiler is actually a part of the llvm project. The good thing about clang is that it has windows binaries, which means I can basically install it directly without any of the mingw / msys nonsense.

I installed clang (and other llvm tools) through winget.

winget install -e --id LLVM.LLVM

Enter fullscreen mode

Exit fullscreen mode

Alternatively, you can get clang (and llvm) from their github releases or website here (which links to their github releases anyway) where you download the windows .exe installer.

Now you should verify that clang has been added to your path by running:

clang --version

Enter fullscreen mode

Exit fullscreen mode

If it gives some error like clang is not recognized...
It means that the llvm binaries (which includes clang) has not been added to your path.
So add the llvm installation which is normally at C:\Program Files\LLVM\bin to your path.

Now if we run clang --version again we should get an output like:

clang version 17.0.1
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: C:\Program Files\LLVM\bin

Enter fullscreen mode

Exit fullscreen mode

Congratulations, we now have a C++ compiler!

Setting up CMake

Most projects use CMake to build the project.
As much as I want to avoid CMake, it is inevitable. You cannot runaway from it.
I will not go into much detail about how cmake works. I find this website is very useful for learning about CMake.

The website also tells you how you can install cmake.

In general, CMake can generate Makefiles, Visual Studio solutions or other stuff needed to compile the project.

Ninja

CMake by default generates a Visual Studio solution. Because I am a avoiding Visual Studio like a plague, we will be using Ninja.

Why Ninja?
We can’t really tell CMake to generate Makefiles because we are not using the gcc toolchain and hence we don’t have gnu make.
Besides ninja claims to be faster and can be installed easily.

Installing Ninja

There are many ways to install ninja:

  1. Use your system package manager. See here
  2. Download the binary from here
  3. Build from source.

Check here for more details

For me I installed using through pip: pip install ninja
(Technically I used pipx but that doesn’t really matter)

It does not matter what method you use, as long as ninja is added to path and accessible from the terminal.

Using CMake with ninja

Now to build your CMake project with Ninja you simply do:

cmake -S <project root> -B build -G Ninja

Enter fullscreen mode

Exit fullscreen mode

Managing dependencies with vcpkg

When you program stuff, we tend to use external libraries/packages so we don’t reinvent the wheel every time we need something.

In python we can simply use pip to install them.

In C# we can use nuget.

However in C++ (and C), we have to manually download the external library/package and add them to the project, or put it in the C drive (which clutters it up), or some other very not elegant solution.

vcpkg solves this. There are other solutions like conan but I find vcpkg to be the simplest.

Installing and adding vcpkg

There are many ways of installing and adding vcpkg to your project.

I will be installing vcpkg as a git submodule.

In the project root folder, run:

git submodule add https://github.com/microsoft/vcpkg

Enter fullscreen mode

Exit fullscreen mode

Now add the following to project CMakeLists.txt before the first project() call.

set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake CACHE STRING "Vcpkg toolchain file")

Enter fullscreen mode

Exit fullscreen mode

This will still allow people to not use vcpkg, by passing the CMAKE_TOOLCHAIN_FILE directly, but it will make the configure-build step slightly easier.
from: https://github.com/microsoft/vcpkg#vcpkg-as-a-submodule-with-cmake

Consuming dependencies

To start using packages from vcpkg, we have to first create a vcpkg.json file in the project root.
In vcpkg.json we declare our dependencies like so:

{
  "dependencies": [
    "fmt", // example dependency
  ]
}

Enter fullscreen mode

Exit fullscreen mode

You can now add use dependencies in CMakeList.txt like:

find_package(fmt CONFIG REQUIRED) // first find the package first
target_link_libraries(main PRIVATE fmt::fmt) // Add package to target

Enter fullscreen mode

Exit fullscreen mode

(Taken from https://learn.microsoft.com/en-gb/vcpkg/consume/manifest-mode?tabs=msbuild%2Cbuild-MSBuild)

Now if you build your project with cmake, vcpkg will automatically fetch the required packages and build them for you.

Finding packages

You can go to https://vcpkg.io/en/packages to see available packages.

TLDR

My C++ setup basically consists of:

  1. llvm/clang
  2. CMake
  3. Ninja
  4. vcpkg

THE END

You can build ezEngine using Clang on Windows. This can be useful to find and fix compilation errors and warnings, that do not happen with MSVC. However, as Clang support on Windows is still experimental, you may not be able to build a working executable.

Using Clang/LLVM with the CMake GUI

Prerequisites

  1. Install CMake (or locate cmake-gui.exe in the ez repository).
  2. Get a recent Clang Windows distribution: https://releases.llvm.org/download.html (the 64-bit version is recommended)
    • Note: The binary should be called something like LLVM-<version>-win64.exe
    • A Windows binary may not be available for the latest version, use an older version, if necessary.
  3. Get ninja from https://ninja-build.org and put it in your PATH environment variable.
  4. If you had to edit your PATH variable, restart your PC.

Generate a Solution

  1. Using cmake-gui.exe, create a new solution for a Clang build by pointing Where to build the binaries to a new location.
  2. Press Configure once, a dialog will show up.
  3. Choose Ninja as the generator.
  4. Choose Specify native compilers then hit Finish.
  5. Specify the C and C++ compiler. When using the default paths they are located at:
    • C: C:/Program Files/LLVM/bin/clang.exe
    • C++: C:/Program Files/LLVM/bin/clang++.exe
  6. Click Finish
  7. If CMake can’t find your ninja.exe even though it is in your PATH set the CMAKE_MAKE_PROGRAM manually to point to ninja.exe and click Configure again.
  8. You will now get an error from CMake No CMAKE_RC_COMPILER could be found.
    1. Check the Advanced checkbox to show additional options.
    2. Point CMAKE_RC_COMPILER to C:\Program Files (x86)\Windows Kits\10\bin\<windows-sdk-version>\x64\rc.exe (for example C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\rc.exe).
    3. Also set CMAKE_RC_COMPILER_INIT to rc (if it even shows up).
  9. Click Configure
  10. Click Generate
  11. Open a Terminal and cd into the build location
  12. Run ninja to build.

Using the Clang frontend for Visual Studio with the CMake GUI

The clang frontend for the Visual Studio Compiler is no longer in development. Use official LLVM Clang as described above.

See Also

  • Windows Builds

Master the clang github setup and building process with this comprehensive tutorial.

  • Kodezi Content Team

Master the clang github setup and building process with this comprehensive tutorial.

Introduction

In the world of software development, efficiency and precision are paramount, especially when it comes to building robust tools like Clang. As developers strive to optimize their workflows, understanding the intricacies of preparing the environment, configuring build options, and verifying installations becomes essential.

This article serves as a comprehensive guide, detailing the streamlined steps and best practices for successfully building Clang across different platforms. From installing necessary dependencies to leveraging custom compiler flags, every detail plays a critical role in enhancing productivity and ensuring a seamless development experience.

Dive into the nuances of Clang’s build process and unlock the potential for greater efficiency in your coding endeavors.

Preparing Your Environment for Clang Build

To effectively prepare your environment for building Clang, adhere to the following streamlined steps:

  1. Install Required Dependencies: Start by ensuring that you have all necessary development tools installed. For Linux systems, this typically includes build-essential, cmake, git, and ninja-build. On Windows, it is advisable to install Visual Studio with the C++ components. Notably, Microsoft Visual C++ 14.0 or greater is essential for building certain extensions, such as ‘hunspell.hunspell’. This statistic reinforces the importance of having the correct version installed to avoid potential issues.

  2. Clone the Clang Repository: Open your terminal and execute the following commands:

    git clone https://github.com/llvm/llvm-project.git
    cd llvm-project
    
    

    This will clone the LLVM project, which encompasses Clang.

  3. Set Up Build Directory: To maintain organization, create a distinct directory for your Clang build:

    mkdir build && cd build
    
    
  4. Configure CMake: Utilize CMake to set up your build environment by running:

    cmake -G Ninja ../llvm
    
    

    This command configures the build system, selecting Ninja as the build generator, which is known for its efficiency in compiling.

  5. Verify Your Setup: Before continuing with the construction, confirm that no errors arose during the setup process. Thoroughly check your dependencies and CMake configuration to ensure your environment is correctly established.

If you encounter issues, remember that obtaining the full error message can help identify necessary development packages.

For those facing installation challenges, a user successfully resolved their issues by downloading packages directly from a third-party source and installing them with pip, showcasing a practical workaround for common hurdles. As noted by a contributor, «For those experiencing this problem while trying to install the email library, I discovered it’s a standard library for python3, not so sure for python 2.» This highlights the importance of understanding the specific libraries required for your Python version.

Each box represents a step in the preparation process, and the arrows indicate the sequential flow from one step to the next.

Platform-Specific Build Instructions for Clang

Building Clang on Linux

  1. Install Required Packages: To set the stage for a successful creation, begin by installing the essential dependencies using your package manager. For Ubuntu users, the command is straightforward:

    sudo apt install build-essential cmake git ninja-build
    

    Be aware that common issues can arise during this process; for instance, Flycheck has reported 7 errors in files included from c/c++-clang, which developers should keep in mind while troubleshooting.

  2. Build Clang: Navigate to your build directory, then initiate the build process by executing:

    ninja clang
    

    This command will compile Clang, setting the foundation for your development tasks. As noted by developers, providing a complete overview of the compiler invocation and error messages can significantly assist in troubleshooting project issues, facilitating a smoother development experience.

Building Clang on Windows

  1. Install Visual Studio: Ensure that Visual Studio is properly installed with the C++ development workload, as this is essential for the compilation process.

  2. Run CMake with Visual Studio: Open a Developer Command Prompt for Visual Studio, then navigate to the previously created construction directory. Execute the following command to configure the environment:

    cmake -G "Visual Studio 16 2019" ..
    
  3. Build Clang: With the configuration complete, proceed to build Clang by running:

    cmake --build . --config Release
    

    This will compile the project in Release mode, optimizing for performance. Additionally, users have reported success in compiling and debugging C++ code using the VS Code C/C++ Runner extension along with CodeLLDB. The integration of these tools has provided a seamless experience for building and debugging C++ applications on Windows.

By following these platform-specific instructions, users can effectively compile the software on their systems using clang github, thereby enhancing their development efficiency. Incorporating insights from developers, such as the importance of understanding shell escaping in error diagnostics, can further clarify common misunderstandings and improve the overall development process.

Blue boxes represent steps for Linux, and green boxes represent steps for Windows.

Configuring Build Options for Clang

When configuring compilation options for Clang GitHub, it is essential to implement strategies that enhance both efficiency and output quality while also ensuring security compliance. Here are key considerations:

  1. Choosing Build Type: Utilize the -DCMAKE_BUILD_TYPE option to define your construction type. The most common configurations include Debug, Release, and RelWithDebInfo. For example:

    cmake -G Ninja -DCMAKE_BUILD_TYPE=Release ../llvm
    
    
  2. Enable/Disable Features: Tailor your configuration by enabling or disabling specific features with the -LLVM_ENABLE_PROJECTS option. If you want to include Clang and its tools, your command would look like this:

    cmake -G Ninja -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm
    
    
  3. Optimization Flags: Integrate architecture-specific optimization flags to maximize performance and ensure your code adheres to the latest security best practices. For instance, using -march=native optimizes the build for your processor:

    [cmake -G Ninja -DCMAKE_CXX_FLAGS="-march](https://julienjorge.medium.com/an-overview-of-build-systems-mostly-for-c-projects-ac9931494444)=native" ../llvm
    
    
  4. External Libraries: If your Clang compilation relies on external libraries, it’s crucial to specify their paths using -D options. This guarantees CMake understands where to find these libraries, promoting a more seamless development experience and improving overall performance.

  5. Tracking Ccache Effectiveness: Check the output of cache -s to keep track of what cache is doing. This is crucial for understanding the effectiveness of the caching mechanism during the process, ultimately contributing to rapid issue resolution and optimization.

  6. Utilizing Automated Debugging Features: During the construction process, leverage automated debugging tools to identify and resolve issues early on. This can prevent potential bottlenecks and enhance the overall quality of your codebase.

  7. Addressing Performance Bottlenecks and Security Compliance: Specific construction configurations can directly aid in fixing performance bottlenecks and ensuring compliance with security standards. For instance, utilizing flags that impose rigorous security checks can assist in identifying vulnerabilities during the construction phase.

Recent developments, such as the introduction of optional attributes for file storage backends—like layout, umask, and update-mtime—can significantly influence how files are handled during the creation process. Joel Rosdahl, the current developer and maintainer of Cache, emphasizes the importance of such configurations, stating,

Cache was originally written by Andrew Tridgell and is currently developed and maintained by Joel Rosdahl.

Additionally, Ccache has support for the -modules option, which hashes module.modulemap files but ignores the cached binary form of modules.

As long as module.modulemap files and other conditions remain the same, the cached result should work, provided sloppiness for modules is set. By staying informed about these updates on Clang GitHub, developers can effectively utilize the latest features in the compiler to optimize their configurations, ensuring improved performance, security, and compliance with coding standards.

Building Clang with Custom Flags

Building Clang with custom flags not only enhances your development process but also integrates automated code debugging and advanced optimization techniques crucial for modern software development. Numerous developers, including Codec Engineer Julien Jorge, have expressed dissatisfaction with current construction systems, noting, ‘Our best bet is currently CMake but it seems to lack official iOS support.’ This emphasizes the significance of choosing the appropriate construction tool for your requirements.

Here’s a concise guide to help you define and apply these flags effectively while ensuring your code adheres to the latest security standards and performance benchmarks:

  1. Define Custom Compiler Flags: Begin by using the -DCMAKE_C_FLAGS and -DCMAKE_CXX_FLAGS options to set your custom compiler flags. For instance:

    cmake -G Ninja -DCMAKE_C_FLAGS="-O2" -DCMAKE_CXX_FLAGS="-O2" ../llvm
    
    
    
    
    

    This command configures both C and C++ builds at optimization level 2, promoting improved performance and addressing potential bottlenecks.

  2. Set Debugging Options: To maintain critical debugging information, consider adding debugging symbols:

    cmake -G Ninja -DCMAKE_CXX_FLAGS_DEBUG="-g" ../llvm
    
    
    
    
    

    This ensures that your build includes relevant debugging data, facilitating easier troubleshooting and rapid issue resolution, which is essential for effective automated code debugging.

  3. Use Preprocessor Definitions: If your project requires specific macros, define them using the -D option:

    cmake -G Ninja -DCMAKE_CXX_FLAGS="-DDEBUG_MODE" ../llvm
    
    
    
    
    

    This setup defines the DEBUG_MODE macro, allowing for conditional compilation based on your needs while ensuring security compliance.

  4. Compile and Build: Once you’ve configured your project with the custom flags, proceed to build Clang:

    ninja clang
    
    
    
    
    

    This final step compiles Clang with all the custom configurations applied, ensuring you leverage your specific settings effectively and enhance overall code quality.

In the context of the ongoing discussion about construction tools, it’s worth noting that the author of the case study titled «Choosing a Construction Tool» concluded that despite numerous options, CMake currently stands out as the best choice, although it still has limitations regarding official iOS support. By following these steps, you can customize your builds to meet your exact requirements, enhancing both efficiency and performance. As developer insights suggest, utilizing these custom flags can significantly streamline the debugging process and optimize code performance, making it a vital practice for developers aiming for high-quality software.

Each box represents a specific step in the process, and the arrows indicate the sequential flow between these steps.

Verifying the Clang Build

Verifying your compiler installation is critical to ensure optimal performance and functionality. Here are the essential steps to confirm your installation is successful:

  1. Check Clang Version: Start by verifying the installed version of Clang with the following command:

    ./bin/clang --version
    
    

    This command will output the Clang version number, confirming that it was built correctly and is ready for use.

  2. Run Clang with Sample Code: To further validate your installation, create a simple C++ test file:

    // test.cpp
    #include <iostream>
    int main() {
        std::cout << "Hello, Clang!" << std::endl;
        return 0;
    }
    
    

    Compile and execute it using:

    ./bin/clang++ test.cpp -o test && ./test
    
    

    You should see the output: Hello, Clang!, confirming that your compiler is functioning as expected.

  3. Review Build Logs: Check the build logs meticulously for any warnings or errors that may have appeared during the build. This step is crucial for identifying potential issues early on.

    Significantly, the integration phase required merely 0.25 seconds of user time, which establishes a performance expectation during this verification.

  4. Run Clang’s Tests: For an additional layer of assurance, run Clang’s built-in tests:

    ninja check-clang
    
    

    This command executes all tests for Clang, ensuring every aspect of the compiler operates as intended. According to the Unity Team,

    The ‘Anomalistic Compile Times’ section can help to track down some patterns in code that end up being very slow for the compiler to process.

    This highlights the necessity of comprehensive testing, especially in light of case studies showing that specific header files can cause significant compile time delays due to recursive macro usage.

  5. Consider Current News: Stay updated on the latest developments regarding the software, including improvements in verifying builds and checking versions. Such knowledge can enhance your workflow efficiency.

By following these steps diligently, you can verify your Clang installation effectively, paving the way for maximum productivity in your development endeavors.

Conclusion

Building Clang is a meticulous yet rewarding process that can significantly enhance development efficiency. This guide has walked through the essential steps of preparing the environment, from installing the necessary dependencies to configuring build options tailored to specific needs. Each phase, whether it’s setting up the build directory or applying custom flags, plays a vital role in ensuring a successful build and optimal performance.

The importance of verification cannot be overstated. By checking the Clang version, running sample code, and executing built-in tests, developers can confirm that their installations are functioning correctly. This thorough validation process not only identifies potential issues early on but also reinforces confidence in the tools being used.

Ultimately, mastering the Clang build process not only streamlines development workflows but also empowers developers to produce high-quality software with enhanced performance and security. Embracing these best practices allows developers to unlock the full potential of Clang, leading to a more efficient and productive coding experience. The journey to building Clang is not just about following steps; it’s about optimizing the development landscape for success.

Ready to elevate your coding experience? Discover how Kodezi can optimize your code and streamline your development process today!

Frequently Asked Questions

What are the initial steps to prepare my environment for building Clang?

To prepare your environment for building Clang, you should: 1. Install required dependencies (e.g., build-essential, cmake, git, ninja-build for Linux, and Visual Studio with C++ components for Windows). 2. Clone the Clang repository using git clone https://github.com/llvm/llvm-project.git and navigate to the directory. 3. Set up a build directory with mkdir build && cd build. 4. Configure CMake with cmake -G Ninja ../llvm. 5. Verify your setup for any errors before proceeding.

What dependencies do I need to install on Linux to build Clang?

On Linux, particularly for Ubuntu users, you need to install the following packages: build-essential, cmake, git, and ninja-build using the command sudo apt install build-essential cmake git ninja-build.

How do I build Clang on Linux?

To build Clang on Linux, navigate to your build directory and run the command ninja clang. This will compile Clang and set the foundation for your development tasks.

What are the steps to build Clang on Windows?

To build Clang on Windows, follow these steps: 1. Ensure Visual Studio is installed with the C++ development workload. 2. Open a Developer Command Prompt for Visual Studio and navigate to the build directory. 3. Run cmake -G "Visual Studio 16 2019" .. to configure the environment. 4. Build Clang by executing cmake --build . --config Release.

How can I configure compilation options for Clang?

You can configure compilation options for Clang by: 1. Choosing the build type with -DCMAKE_BUILD_TYPE (e.g., Debug, Release). 2. Enabling/disabling features using -DLLVM_ENABLE_PROJECTS. 3. Integrating optimization flags with -DCMAKE_CXX_FLAGS. 4. Specifying paths for external libraries with -D options. 5. Tracking ccache effectiveness and utilizing automated debugging features.

What should I do to verify my Clang installation?

To verify your Clang installation: 1. Check the Clang version with ./bin/clang --version. 2. Run a sample C++ code to ensure it compiles and executes correctly. 3. Review build logs for any warnings or errors. 4. Run Clang’s built-in tests with ninja check-clang.

What common issues might arise during the installation process?

Common issues during installation can include missing development packages, errors in file compilation, and specific library requirements for different Python versions. If problems arise, obtaining full error messages can help identify necessary packages.

Read next

Project

Cmake with Clang/GCC example for windows

Support environment

Window with

  • Cmake
  • LLVM
  • MinGW (path C:\tools\mingw64)
  • Ninja

cmake/clang/gcc/(mingw32-make)/ninja add to %PATH%

build

for GCC

$ cd build
$ cmake -C ../gcc-cmakeinit.cmake -GNinja ../src
$ <run command>

for Clang

$ cd build
$ cmake -C ../clang-cmakeinit.cmake -GNinja ../src
$ <run command>

note:current version

Ninja build are failed; use alt ex.clang

$ cmake -GNinja -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_CXX_FLAGS="--target=x86_64-pc-windows-gnu" ../src

Support build method (-G)

  • «MSYS Makefiles» — mingw32-make
  • «MinGW Makefiles» — mingw32-make
  • Ninja — ninja

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Службы windows server update services сбой настройки
  • Интернет контроль сервер для windows
  • Windows 7 со старым загрузчиком
  • Windows xp оригинальные звуки
  • Мегафон приложение для модема windows 10