Hi,

> However, with the current implementation, only one version of the library
> actually exists within a single build process.

What does "only one version of the library" mean here? Only
shared version or only static version? If we use
-DARROW_BUILD_SHARED=ON and -DARROW_BUILD_STATIC=ON, we can
build both of shared version and static version in the same
build process. Am I missing something?


Thanks,
-- 
kou

In <cahgae5exol+9ohtujp+-n3vpssrgeajbxn1do0dlegbqsz6...@mail.gmail.com>
  "Re: [C++] Static/Shared Linkage in CMakeLists.txt" on Tue, 3 Jun 2025 
16:37:42 +0800,
  Eddie Chang <kalcifer7...@gmail.com> wrote:

> 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