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? >>