# generator Visual Studio 16 2019

**URL:** https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011
**Category:** Usage
**Tags:** os:windows
**Created:** [February 15, 2022, 10:17am UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011 "2022-02-15T10:17:36Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![alice](https://discourse.cmake.org/user_avatar/discourse.cmake.org/alice/32/1615_2.png) [@alice](https://discourse.cmake.org/u/alice)
#### Post date: [February 15, 2022, 10:17am UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/1 "2022-02-15T10:17:36Z")

</div>

I have a project and use the command to build it.

```auto
mkdir build
cd build
cmake -G "ninja" ^
		-DCMAKE_INSTALL_PREFIX=..\release ^
		-DCMAKE_BUILD_TYPE=Release
ninja -j12 install

```

Now I want to build it with `Visual Studio 16 2019`  
How can I do next step? Except double click .sln method

```auto
mkdir build
cd build
cmake -G "Visual Studio 16 2019" ^
		-DCMAKE_INSTALL_PREFIX=..\release ^
		-DCMAKE_BUILD_TYPE=Release

```

---

<div class="post-metadata">

### Author: ![fenrir](https://discourse.cmake.org/user_avatar/discourse.cmake.org/fenrir/32/734_2.png) [@fenrir](https://discourse.cmake.org/u/fenrir)
#### Post date: [February 15, 2022, 10:22am UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/2 "2022-02-15T10:22:36Z")

</div>

The simplest way to build and install anything regardless of the generator is:  
`cmake --build . --target install` from the build directory.

---

<div class="post-metadata">

### Author: ![alice](https://discourse.cmake.org/user_avatar/discourse.cmake.org/alice/32/1615_2.png) [@alice](https://discourse.cmake.org/u/alice)
#### Post date: [February 15, 2022, 10:46am UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/3 "2022-02-15T10:46:35Z")

</div>

I want to assign PREFIX path for release library.  
Should I duplicate declare PREFIX for `cmake -G` and `cmake --install`?

Should I duplicate declare build type for ( -DCMAKE\_BUILD\_TYPE and --config)

```auto
mkdir build
cd build
cmake -G "Visual Studio 16 2019" ^
		-DCMAKE_INSTALL_PREFIX=..\release ^
		-DCMAKE_BUILD_TYPE=Release
cmake --build . --target install --config Release
cmake --install . --config release --prefix ..\release

```

---

<div class="post-metadata">

### Author: ![fenrir](https://discourse.cmake.org/user_avatar/discourse.cmake.org/fenrir/32/734_2.png) [@fenrir](https://discourse.cmake.org/u/fenrir)
#### Post date: [February 15, 2022, 10:54am UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/4 "2022-02-15T10:54:02Z")

</div>

I don’t use multi-config generators at all, so I don’t really know how to deal with that.

---

<div class="post-metadata">

### Author: ![ben.boeckel](https://discourse.cmake.org/letter_avatar_proxy/v4/letter/b/ea5d25/32.png) [@ben.boeckel](https://discourse.cmake.org/u/ben.boeckel)
#### Post date: [February 15, 2022, 12:46pm UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/5 "2022-02-15T12:46:45Z")

</div>

> [@alice](#):
>
> Should I duplicate declare build type

`CMAKE_BUILD_TYPE` has no intrinsic meaning to multi-config generators. The project code can care, but it shouldn’t.

---

<div class="post-metadata">

### Author: ![buildSystemPerson](https://discourse.cmake.org/user_avatar/discourse.cmake.org/buildsystemperson/32/2851_2.png) [@buildSystemPerson](https://discourse.cmake.org/u/buildSystemPerson)
#### Post date: [February 15, 2022, 2:44pm UTC](https://discourse.cmake.org/t/generator-visual-studio-16-2019/5011/6 "2022-02-15T14:44:46Z")

</div>

The following will work for either Visual Studio / Ninja

Writing your build script this way makes it easier to change your generator on the fly:

```auto
cmake -B build/ -D CMAKE_BUILD_TYPE=Release

cmake --build build/ --config Release

cmake --install build/ --config Release --prefix C:/release/

```

`--config` doesn’t do anything for Ninja

`CMAKE_BUILD_TYPE` doesn’t do anything for Visual Studio

Using them as shown above though should simplify your scripts though.
