From b39e38a7a16506e410764283e2743d4c752a8e7d Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 10 Aug 2018 18:14:24 +0100 Subject: [PATCH 1/2] Workspaces: Re-define find_package for subprojects find_package does not play well with subprojects added through add_subdirectory. As of today, the recommended approach is to re-define find_package to a no-op for all subprojects before they are added as subdirectories. After all subprojects have been added as subdirectories, all outstanding targets will be found and there will be no linking error. Fixes #3302: "[workspaces] Support for the cmake_paths generator". --- conans/model/workspace.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/conans/model/workspace.py b/conans/model/workspace.py index 3cdff1181c3..2b3a24dca19 100644 --- a/conans/model/workspace.py +++ b/conans/model/workspace.py @@ -108,8 +108,16 @@ def generate(self): cmake_minimum_required(VERSION 3.3) project({name} CXX) +macro(find_package) + set(CONAN_SUBPROJECTS {subprojects}) + if(NOT "${{ARGV0}}" IN_LIST CONAN_SUBPROJECTS) + _find_package(${{ARGV}}) + endif() +endmacro() + """ - cmake = template.format(name=self._name) + subprojects = ' '.join(self._workspace_packages.keys()) + cmake = template.format(name=self._name, subprojects=subprojects) for _, workspace_package in self._workspace_packages.items(): build_folder = workspace_package.build_folder build_folder = build_folder.replace("\\", "/") From df1ebda852de49b09bbdc4b9a35fed90bf028563 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 10 Aug 2018 18:19:29 +0100 Subject: [PATCH 2/2] Workspaces: Add enable_testing() in top-level file This allows the user to run commands like `ninja test` for all subprojects at once. --- conans/model/workspace.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conans/model/workspace.py b/conans/model/workspace.py index 2b3a24dca19..decc9217753 100644 --- a/conans/model/workspace.py +++ b/conans/model/workspace.py @@ -115,6 +115,8 @@ def generate(self): endif() endmacro() +enable_testing() + """ subprojects = ' '.join(self._workspace_packages.keys()) cmake = template.format(name=self._name, subprojects=subprojects)