Using CMake flow to build libraries, Android apps

FWIW I’ve got something like this working (staticlibs depending on JUCE) with the following sort of setup:

# Set up JUCE library
add_library(juce_plugin_modules OBJECT)

target_link_libraries(juce_plugin_modules
    PRIVATE
        juce::juce_audio_utils
        juce::juce_dsp
    PUBLIC
        juce::juce_recommended_config_flags
        juce::juce_recommended_warning_flags)

target_compile_definitions(juce_plugin_modules
    PUBLIC
        JucePlugin_Build_Standalone=1
        JUCE_STANDALONE_APPLICATION=JucePlugin_Build_Standalone
    INTERFACE
        $<TARGET_PROPERTY:juce_plugin_modules,COMPILE_DEFINITIONS>)

target_include_directories(juce_plugin_modules
    INTERFACE
        $<TARGET_PROPERTY:juce_plugin_modules,INCLUDE_DIRECTORIES>)

set_default_properties(juce_plugin_modules) # function defined elsewhere. enables PIC, hidden symbols

# Add dependent library
# Library includes JUCE module headers directly, rather than using a JuceHeader.h

add_library(foo STATIC)
target_sources(foo PRIVATE ${sources}) # sources set previously
target_include_directories(foo PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(foo PUBLIC juce_plugin_modules)
set_default_properties(foo) # function defined elsewhere. enables PIC, hidden symbols

# Do something similar for library 'bar'...

# Add plugin target

juce_add_plugin(plug
    # etc.
    )

target_sources(plug PRIVATE ${plug_sources})
target_include_directories(plug PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_link_libraries(plug PRIVATE foo bar)
target_compile_definitions(plug PUBLIC JUCE_VST3_CAN_REPLACE_VST2=0)
3 Likes