generateExternal()

in src/langs/cpp/package_info.js [217:268]


  generateExternal() {
    // generate external/CMakeLists.txt
    let tmpl_path = this.config.withTest ?
      path.join(__dirname, './files/external/CMakeLists.txt.test.tmpl') :
      path.join(__dirname, './files/external/CMakeLists.txt.tmpl');
    this.addGlobalPackage();
    let keys = Object.keys(this.dependencies);
    let libraries = '';
    if (keys.length > 0) {
      keys.forEach(key => {
        const item = this.dependencies[key];
        const meta = item.meta;
        if (_isExcludePackage(item.scope, meta.name)) {
          return;
        }
        const res = this.resolveGitInfo(meta);
        if (false !== res) {
          const { package_name, git_link, git_tag } = this.resolveGitInfo(meta);
          if (!_contain(this.imports, package_name)) {
            this.renderAuto(
              tmpl_path,
              path.join(this.config.dir, `external/${package_name}/CMakeLists.txt`), {
                package_name: package_name,
                git_link: git_link,
                git_tag: git_tag,
                project_name: this.project_name
              }
            );
            libraries += `add_subdirectory(${package_name})${os.EOL}`;
            this.imports.push(package_name);
          }
        }
      });
    }
    this.renderContent(
      'message(STATUS "Install libraries")\n${libraries}${libraries_dev}',
      path.join(this.config.dir, 'external/CMakeLists.txt'), {
        libraries: libraries,
        libraries_dev: this.config.withTest ? 'if (ENABLE_UNIT_TESTS)\n  add_subdirectory(googletest)\nendif()\n' : ''
      }
    );
    if (this.config.withTest) {
      this.renderAuto(
        path.join(__dirname, './files/external/googletest.CMakeLists.txt.tmpl'),
        path.join(this.config.dir, 'external/googletest/CMakeLists.txt'), {}
      );
      this.renderAuto(
        path.join(__dirname, './files/external/googletest.CMakeLists.txt.in.tmpl'),
        path.join(this.config.dir, 'external/googletest/CMakeLists.txt.in'), {}
      );
    }
  }