Hi Kou,

Building both shared and static versions of the library simultaneously is
certainly possible. My current focus is on the fact that we have multiple
build targets linking against the same library, and each time we do so, we
repeat the same if-else logic to decide which version to link.

However, with the current implementation, only one version of the library
actually exists within a single build process. So we only need to determine
whether to build the static or shared version once—when building the
library itself—instead of repeating the same check every time a build
target links against the same library.

If you'd like to support both versions, I suppose you already need to build
twice (with different build options) with the current implementation?
Thanks,
Eddie

Sutou Kouhei <k...@clear-code.com> 於 2025年6月3日 週二 下午3:10寫道:

> Hi,
>
> How to support a use case that wants both of shared library
> and static library with your suggested approach? Do you
> build Apache Arrow C++ twice for shared library and static
> library?
>
> If so, what CMake package name is used for them?
> "ArrowShared" and "ArrowStatic"?
>
>
> Thanks,
> --
> kou
>
> In <cahgae5er0+vbomjv7w8_dt068yhabclqdkkigo_qp8lz4vr...@mail.gmail.com>
>   "RE: Re: [C++] Static/Shared Linkage in CMakeLists.txt" on Tue, 3 Jun
> 2025 14:49:02 +0800,
>   Eddie Chang <kalcifer7...@gmail.com> wrote:
>
> > Just to clarify, my suggestion was assuming that each build only produces
> > either static or shared libraries, not both.
> >
> > Given that assumption, wouldn't it be better to define targets using a
> > single name (without `_static` or `_shared` suffix), and decide in one
> > place whether that target is defined as STATIC or SHARED depending on the
> > `ARROW_BUILD_SHARED`?
> >
> > That way, we wouldn't need to switch on `ARROW_BUILD_SHARED` repeatedly
> to
> > determine which target name to link.
> >
> > On 2025/06/03 06:05:45 Sutou Kouhei wrote:
> >> Hi,
> >>
> >> Do you want a CMake target that can be used for shared
> >> linking and static linking? For example, you want to use
> >> Parquet::parquet for shared linking and static linking,
> >> right?
> >>
> >> In my understanding, we can't do it with CMake. We need to
> >> specify "SHARED" or "STATIC" when create a CMake target by
> >> add_library().
> >> See also:
> >> https://cmake.org/cmake/help/latest/command/add_library.html#normal
> >>
> >> Thanks,
> >> --
> >> kou
> >>
> >> In <ca...@mail.gmail.com>
> >>   "[C++] Static/Shared Linkage in CMakeLists.txt" on Tue, 3 Jun 2025
> > 13:45:36 +0800,
> >>   Eddie Chang <ka...@gmail.com> wrote:
> >>
> >> > Hello everyone, I've noticed that in our CMakeLists.txt files, we have
> >> > multiple instances where we conditionally select either the static or
> >> > shared version of a linked target based on a cache variable such as
> >> > ARROW_BUILD_SHARED. For example, the following pattern appears in
> > several
> >> > places:
> >> >
> >> >     if(ARROW_BUILD_SHARED)
> >> >         set(PARQUET_EXAMPLE_LINK_LIBS parquet_shared)
> >> >     else()
> >> >         set(PARQUET_EXAMPLE_LINK_LIBS parquet_static)
> >> >     endif()
> >> >
> >> > I’m wondering if there is a specific reason we don’t set the
> > static/shared
> >> > property of the libraries in a single location, and instead continue
> >> > duplicating this kind of logic throughout the codebase?
> >>
>

Reply via email to