Skip to content

Instantly share code, notes, and snippets.

@RossBencina
Created September 5, 2025 07:45
Show Gist options
  • Select an option

  • Save RossBencina/c98a9e72cb2a2259d593406aa78b4db4 to your computer and use it in GitHub Desktop.

Select an option

Save RossBencina/c98a9e72cb2a2259d593406aa78b4db4 to your computer and use it in GitHub Desktop.
New PortAudio CMake Build Instructions Review - Windows/MSVC September 5, 2025

PortAudio CMake instructions testing 5 September 2025.

Windows 10, MSVC 2022 Community Edition

Working from latest rev of: https://github.com/PortAudio/portaudio/pull/1044/files

  C:\PortAudio_20250905\build>cmake --version
  cmake version 4.0.3

  CMake suite maintained and supported by Kitware (kitware.com/cmake).

TLDR

This file is a log of testing the current proposed new CMake PortAudio build tutorial on Windows (see above specs).

On Windows, these things worked:

  • I was able to follow the instructions to successfully build the portaudio library in Release and Debug mode both from the command line and from within Visual Studio.
  • I was able to build and run examples and tests, both from the command line and from within Visual Studio using the default (static lib) mode.
  • I was able to set breakpoints in Visual Studio and trace into PortAudio library code with the debugger
  • The instructions for enabling ASIO worked. CMake automatically downloaded the ASIO SDK and pa_devs.exe listed my ASIO devices.
  • I was able to follow the instructions to successfully build a portaudio.dll and examples which worked with the dll once the system could find the .dll

On Windows, what happened and what the tutorial told me differed in the following ways:

  • The tutorial told me that test executables would be found in /test but they were in /test/Debug and test/Release similar for examples. This means that the instructions for running tests and examples are incorrect on Windows. (This might be handled with a simple note like: "With Visual Studio the executables are placed in the Debug, Release directories depending on which build configuration is selected." I don't actually know how this works. I know that the Visual Studio generator is a multi-configuration generator and that some other generators are not, so maybe more generic language is needed like "With Visual Studio (and some other generators) the executables are placed in subdirectories reflecting the selected build configuration, for example debug builds can be found in test/Debug and release builds can be found in test/Release")

Other comments:

  • I don't think the tutorial told me where to find the built portaudio library. I found it in Debug and Release I guess on Unix it is just in the build directory? I think this missing piece of information should be added to the tutorial at the end of the first build step, like "you can see the portaudio library has been created in ...".

  • I did not test every last documented option. If some of these don't work we can fix them later. But it is important to know how to build debug/release and static/dynamic and these options worked for me.

  • It would be nice if the VisualStudio project somehow referenced the dll path so that the examples could be tested in the debugger in dynamic builds, but this is a bug with the CMakeLists.txt not with these instructions.

"@section compile_cmake_general General Steps"

Followed the initial instructions to the letter:

git clone https://github.com/portaudio/portaudio
mkdir build
cd build
cmake ../portaudio
cmake --build .

This looks like it performed a static debug build:

ls Debug
portaudio.lib portaudio.pdb

Review

  • instructions got me to build portaudio.lib which was the expected outcome.

  • instructions did not tell me where to find the output files. The instructions were not incorrect. Maybe a sentence like "For Makefile builds you will find the compiled portaudio library in the build directory. The Visual Studio project places release builds in build\Release and debug builds in build\Debug.

"@subsection compile_cmake_general_running_tests_examples Running Tests and Examples"

Then tried enabling building tests and examples:

cmake -DPA_BUILD_TESTS=ON -DPA_BUILD_EXAMPLES=ON ../portaudio
cmake --build .

This seems to work.

Looking at the examples/ directory, each example has its own visual studio project, there are subdirectories for each example, e.g. `examples/pa_devs.dir/

C:\PortAudio_20250905\build>ls examples\pa_devs.dir\Debug
pa_devs.exe.recipe  pa_devs.obj         vc143.pdb
pa_devs.ilk         pa_devs.tlog

However the executables themselves are in examples\Debug:

C:\PortAudio_20250905\build>ls examples\Debug
pa_devs.exe                 paex_saw.exe
pa_devs.pdb                 paex_saw.pdb
pa_fuzz.exe                 paex_sine.exe
pa_fuzz.pdb                 paex_sine.pdb
paex_ocean_shore.exe        paex_sine_c++.exe
paex_ocean_shore.pdb        paex_sine_c++.pdb
paex_pink.exe               paex_wmme_ac3.exe
paex_pink.pdb               paex_wmme_ac3.pdb
paex_read_write_wire.exe    paex_wmme_surround.exe
paex_read_write_wire.pdb    paex_wmme_surround.pdb
paex_record.exe             paex_write_sine.exe
paex_record.pdb             paex_write_sine.pdb
paex_record_file.exe        paex_write_sine_nonint.exe
paex_record_file.pdb        paex_write_sine_nonint.pd

Running examples\Debug\pa_devs.exe works.

Running examples\Debug\paex_sine.exe works.

Same file system layout for test.

Running test\Debug\patest_maxsines.exe works.

Opened the solution in msvc: start PortAudio.sln

The solution contains all of the examples and tests, and has Configurations for Debug, Release, MinSizeRel, RelWithDebInfo. Selecting the release configuration and running Build > Build Solution F7, which appears to have compiled release versions of everything:

C:\PortAudio_20250905\build>ls Release
portaudio.lib

C:\PortAudio_20250905\build>ls examples\Release
pa_devs.exe                 paex_saw.exe
pa_fuzz.exe                 paex_sine.exe
paex_ocean_shore.exe        paex_sine_c++.exe
paex_pink.exe               paex_wmme_ac3.exe
paex_read_write_wire.exe    paex_wmme_surround.exe
paex_record.exe             paex_write_sine.exe
paex_record_file.exe        paex_write_sine_nonint.exe

C:\PortAudio_20250905\build>ls test\Release
pa_minlat.exe
patest1.exe
patest_buffer.exe
patest_callbackstop.exe
patest_clip.exe
patest_converters.exe
patest_dither.exe
(and so on)

Back in Visual Studio I was able to right-click paex_sine and select "Set as Startup Project" then run paex_sine with the debugger, set breakpoints, and step into PortAudio library code.

Review

  • everything worked as expected. perhaps even better than expected.

  • the instructions were not accurate. for example they said that I could run a test using test/sometest however I actually had to run test/Debug/patest_sometest or test/Release/patest_sometest, examples/Debug/paex_sine and so on.

"@section compile_cmake_win Windows"

Review:

Worked as expected, but I've added some comments to the review around clarifying that the Visual Studio generator is a multi-configuration generator that generates all of Debug, Release, ... into the same project.

"@subsection compile_cmake_win_asio Compiling With ASIO Support"

The following "just worked" for me. It downloaded the ASIO SDK, and the resulting pa_devs.exe listed my ASIO devices.

cmake -DPA_BUILD_TESTS=ON -DPA_BUILD_EXAMPLES=ON -DPA_USE_ASIO=ON ../portaudio
cmake --build . --config Release
examples\Release\pa_devs

Review:

All good

"@subsubsection compile_cmake_options_pa_misc Miscellaneous Build Options"

**test building shared libraries: -DPA_BUILD_SHARED_LIBS=ON`

cmake -DPA_BUILD_TESTS=ON -DPA_BUILD_EXAMPLES=ON -DPA_USE_ASIO=ON -DPA_BUILD_SHARED_LIBS=ON ../portaudio
cmake --build . --config Release
C:\PortAudio_20250905\build>ls Release
portaudio.dll  portaudio.exp  portaudio.lib
test\Release\patest_maxsines.exe

Failed to run. DLL not found.

cp Release\portaudio.dll test\Release
Release\patest_maxsines.exe

So it works from the command line. Now how about Visual Studio:

start portaudio.sln

Tried to build and run paex_sine. Build worked but dll was not found. I wonder if there is a way to fix this?

Review:

All good except shared library build doesn't put portaudio.dll on the path for running examples and tests from within visual studio. This is not a problem with the instructions. I will create an issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment