CMake VST3 Linux - no output file

Hello! I have Debian Bookworm.
All dependencies updated / installed per the README.
I also installed the ARA SDK and set the path to it in CMakeLists.txt.

I run:
cmake . -B cmake-build -DJUCE_BUILD_EXAMPLES=ON -DJUCE_BUILD_EXTRAS=ON
all good, then:
cmake --build cmake-build --target ARAPluginDemo --config Release

Seems OK. I also tried without --config Release.

I went through a bunch of searching, scanning, path cheking, etc. until I discovered that there are NO .vst3 files anywhere in the JUCE folder. There are folders with the names of the intended .vst3 files, and inside each one is “Contents/x86_64-linux/” but that folder is empty.
I am following the instructions exactly according to the README file.
Am I missing something to get JUCE to make .vst3 files using CMake on Linux?

VST3 plugins are “bundles” which appear as directories on Linux and Windows. Single file plugins have been deprecated for almost a decade now.

If you share the output of the cmake --build command it may be easier to help.

I don’t think the problem is with ARA The Gain Plugin does the same..

$ cmake --build cmake-build --target GainPlugin --config Release
[ 0%] Built target juce_linux_subprocess_helper
[ 0%] Generating GainPlugin_artefacts/JuceLibraryCode/JuceHeader.h
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/GainPlugin_artefacts/JuceLibraryCode/Main.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/ARAPluginDemo_artefacts/JuceLibraryCode/juce_LinuxSubprocessHelperBinaryData.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_processors/juce_audio_processors.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_extra/juce_gui_extra.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_basics/juce_gui_basics.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_basics/juce_gui_basics_2.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_basics/juce_gui_basics_3.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_basics/juce_gui_basics_4.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_gui_basics/juce_gui_basics_5.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_graphics/juce_graphics.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_graphics/juce_graphics_Harfbuzz.cpp.o
[100%] Building C object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_graphics/juce_graphics_Sheenbidi.c.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_events/juce_events.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_core/juce_core.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_core/juce_core_CompilationTime.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_data_structures/juce_data_structures.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_processors_headless/juce_audio_processors_headless.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_processors_headless/juce_audio_processors_headless_ara.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_processors_headless/juce_audio_processors_headless_lv2_libs.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_basics/juce_audio_basics.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_devices/juce_audio_devices.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_formats/juce_audio_formats.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/__/__/modules/juce_audio_utils/juce_audio_utils.cpp.o
[100%] Linking CXX static library GainPlugin_artefacts/libGainPlugin_SharedCode.a
[100%] Built target GainPlugin

There is no .vst3 file anywhere. The .vst3 folder under the Gain plugin has no files in it.

It seems you built the SharedCode library. Try building the target with the _VST3 suffix i.e. --target GainPlugin_VST3.

The Surge vst3 install still has a .vst3 file inside the folder.

$ cmake --build cmake-build --target GainPlugin --config Release
[ 0%] Built target juce_linux_subprocess_helper
[ 0%] Generating GainPlugin_artefacts/JuceLibraryCode/JuceHeader.h
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/GainPlugin_artefacts/JuceLibraryCode/Main.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir/ARAPluginDemo_artefacts/JuceLibraryCode/juce_LinuxSubprocessHelperBinaryData.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_processors/juce_audio_processors.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_extra/juce_gui_extra.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_basics/juce_gui_basics.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_basics/juce_gui_basics_2.cpp.o
[ 0%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_basics/juce_gui_basics_3.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_basics/juce_gui_basics_4.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_gui_basics/juce_gui_basics_5.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_graphics/juce_graphics.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_graphics/juce_graphics_Harfbuzz.cpp.o
[100%] Building C object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_graphics/juce_graphics_Sheenbidi.c.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_events/juce_events.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_core/juce_core.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_core/juce_core_CompilationTime.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_data_structures/juce_data_structures.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_processors_headless/juce_audio_processors_headless.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_processors_headless/juce_audio_processors_headless_ara.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_processors_headless/juce_audio_processors_headless_lv2_libs.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_basics/juce_audio_basics.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_devices/juce_audio_devices.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_formats/juce_audio_formats.cpp.o
[100%] Building CXX object examples/Plugins/CMakeFiles/GainPlugin.dir///modules/juce_audio_utils/juce_audio_utils.cpp.o
[100%] Linking CXX static library GainPlugin_artefacts/libGainPlugin_SharedCode.a
[100%] Built target GainPlugin

Unlike the ARA plugin demo, this one does have a .so file inside the Contents folder; but Reaper does not find it no matter what I do.

Again, try building the target _VST3 or _ALL exists sometimes too:

cmake --build cmake-build --target GainPlugin_VST3 --config Release

Thank you. As a general rule, if you say that, does it mean that one of the CMake files must actually define this target? Because it is not mentioned in CMakeLists.txt in the main JUCE folder, nor the examples folder, nor the examples/Plugins folder.

In that case your FORMATS variable might be empty.
See here:

FORMATS

For plugin targets, specifies the plugin targets to build. Should be provided as a space-separated list. Valid values are Standalone Unity VST3 AU AUv3 AAX VST LV2. AU and AUv3 plugins will only be enabled when building on macOS; AUv3 plugins will only be enabled when using the Xcode generator. It is an error to pass VST without first calling juce_set_vst2_sdk_path.

This variable is often generated with if() around platforms, and yours might exclude VST3 on linux (guessing)

Once you fixed the FORMATS variable (use message() to print the content), you need to run the first cmake step as well…

Hmm. Thanks for the tip. I will absorb this as I experiment, but I do find it vexing that none of what you just cited is in any of the CMakeLists.txt files in the example plugin directories or upper directories. I was wondering what I missed that could have saved me the trouble of posting here, and why I’m the first person to do so…

At any rate, the ARA plugin demo is now working, and I’m about to have a great time.

I’m glad it is working now.

Indeed, the PIP that abstracts away all those things. I don’t think that does a great service when you try to understand, how to set it up yourself. And I doubt many people setup their projects as a PIP in production.