How to link in different prebuilt objects based on configuration

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

How to link in different prebuilt objects based on configuration

Daniel Schepler
We have a build here where a large portion of our product is in source code available to customers, but then there is a core which we only distribute as prebuilt "private objects".  However, then when we test the customer-type build on Windows, we get an error like:

---
CMake Error in CMakeLists.txt:
Target "exata" has source files which vary by configuration. This is not
supported by the "Visual Studio 15 2017 Win64" generator.

Config "Debug":

E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14d.obj

Config "Release":

E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14.obj
---

(This object file is marked with source file property EXTERNAL_OBJECT=1.)

Is this a limitation in Visual Studio projects, or a limitation in CMake?  In either case, what workaround could allow this build to support generating Visual Studio projects?
--
Daniel Schepler

--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: How to link in different prebuilt objects based on configuration

CMake mailing list
As far as I know this is a limitation of the MSVC project files, and
CMake errors out on that generator rather than try and build an
invalid project.

Have you tried do something where you have the Config and Release
objects as separate targets that always exist, but selectively
conditionally to them based on the Config setting?

On Thu, Dec 13, 2018 at 2:16 PM Daniel Schepler
<[hidden email]> wrote:

>
> We have a build here where a large portion of our product is in source code available to customers, but then there is a core which we only distribute as prebuilt "private objects".  However, then when we test the customer-type build on Windows, we get an error like:
>
> ---
> CMake Error in CMakeLists.txt:
> Target "exata" has source files which vary by configuration. This is not
> supported by the "Visual Studio 15 2017 Win64" generator.
>
> Config "Debug":
>
> E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14d.obj
>
> Config "Release":
>
> E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14.obj
> ---
>
> (This object file is marked with source file property EXTERNAL_OBJECT=1.)
>
> Is this a limitation in Visual Studio projects, or a limitation in CMake?  In either case, what workaround could allow this build to support generating Visual Studio projects?
> --
> Daniel Schepler
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake
--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake
Reply | Threaded
Open this post in threaded view
|

Re: How to link in different prebuilt objects based on configuration

Daniel Schepler
I did eventually find a solution where I set up an imported target with IMPORTED_LOCATION and IMPORTED_LOCATION_DEBUG properties pointing to the object files, and then linked in that target with target_link_libraries().  I admit I wasn't completely sure if adding .obj/.o files to the link lines in this way would be well supported, though it did seem to work OK in practice in the generators I tested to cover what our customers and build systems use (Visual Studio, NMake Makefiles [JOM], Unix Makefiles for the Linux build, and Ninja on Linux).
--
Daniel
________________________________________
From: Robert Maynard [[hidden email]]
Sent: Tuesday, December 18, 2018 11:08 AM
To: Daniel Schepler
Cc: CMake MailingList
Subject: Re: [CMake] How to link in different prebuilt objects based on configuration

As far as I know this is a limitation of the MSVC project files, and
CMake errors out on that generator rather than try and build an
invalid project.

Have you tried do something where you have the Config and Release
objects as separate targets that always exist, but selectively
conditionally to them based on the Config setting?

On Thu, Dec 13, 2018 at 2:16 PM Daniel Schepler
<[hidden email]> wrote:

>
> We have a build here where a large portion of our product is in source code available to customers, but then there is a core which we only distribute as prebuilt "private objects".  However, then when we test the customer-type build on Windows, we get an error like:
>
> ---
> CMake Error in CMakeLists.txt:
> Target "exata" has source files which vary by configuration. This is not
> supported by the "Visual Studio 15 2017 Win64" generator.
>
> Config "Debug":
>
> E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14d.obj
>
> Config "Release":
>
> E:/EXata_7_0/qualnet_dev_13_Dec18/kernel/obj/exata-main-windows-x64-vc14.obj
> ---
>
> (This object file is marked with source file property EXTERNAL_OBJECT=1.)
>
> Is this a limitation in Visual Studio projects, or a limitation in CMake?  In either case, what workaround could allow this build to support generating Visual Studio projects?
> --
> Daniel Schepler
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake