在 c++11 和 c++98 的单一构建中使用 cmake 2.8.2 来创建共享库时,如何每次重新编译源文件?

2024-01-12

我的项目目录结构为:

Root
  Source
    Common
      MyFolder
      ++ My 3 source files and header 

当我构建项目时,它会生成 3 到 4 个共享库。Lib1使用 c++98 编译,其他使用 c++11 编译。标志添加到根目录下的 CmakeList.txt 中。 我需要编译 3 个源文件Lib1以及其他库。但这里发生的情况是编译器首先使用 c++11 编译 lib 的源文件,然后尝试对 Lib1 使用相同的 .o 文件。因此,对于使用 c++11 生成的 .o 文件,当将其用于 c++98 编译库时,会引发异常。

那么如何在 CmakeList.txt 中编写此内容,以便编译器而不是尝试使用相同的 .o 文件再次为 Lib1(c++98 编译库)编译源文件

是否有我可以指定的任何标志,以便它不会采用预编译的 .o 文件并再次编译它?

这里的标志没有被不同的共享库覆盖,但实际上 make 文件的相同目标文件被用于不同的标志


这有点与 makefile 和cmake平时工作。

大多数用户认为这一点非常重要make执行增量构建。

使用 makefile 的通常方法是make clean这应该删除创建的任何二进制文件和目标文件。

然而,有时我编写 cmake 脚本,使用源目录上的通配符来组装项目。 (这意味着,它说“只要抓住所有*.cpp文件在/src文件夹并从中生成可执行文件”。)makefile 无法检查目录中的文件,因此在添加新文件后 make 构建将被破坏,并且make clean不会修复它——整个 makefile 将需要重新生成cmake.

通常我所做的是,编写一个简单的 bash 脚本,名为rebuild.sh或者其他的东西,

#!/bin/bash
rm -rf build
mkdir build
cd build
cmake ..
make -j3
./tests

我将其放在存储库的根目录中,然后添加/build to my .gitignore。当我想要进行完全重建时,我称之为 - 它会破坏构建目录,因此它是万无一失的。当我想要增量重建时,我只需输入make再次在/build目录。

The rebuild.sh如果您使用,脚本也可以起到双重作用travis-ci用于持续集成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 c++11 和 c++98 的单一构建中使用 cmake 2.8.2 来创建共享库时,如何每次重新编译源文件? 的相关文章

随机推荐