我的项目目录结构为:
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(使用前将#替换为@)