D_E*_*D_E 6 c++ makefile cmake platform-independent
我们正在从MPC转向 CMake。我们提供了一个包含一些示例的库。样本附带 makefile。
问题是由 cmake 生成的 makefile 包含绝对路径,但不包含相对路径:
# The main all target
all: cmake_check_build_system
cd /.../Projects/cpp_trunk && $(CMAKE_COMMAND) -E cmake_progress_start /.../Projects/cpp_trunk/CMakeFiles /.../Projects/cpp_trunk/samples/CMakeFiles/progress.make
cd /.../Projects/cpp_trunk && $(MAKE) -f CMakeFiles/Makefile2 samples/all
$(CMAKE_COMMAND) -E cmake_progress_start /.../cpp_trunk/CMakeFiles 0
Run Code Online (Sandbox Code Playgroud)
因此,当它被复制时,它就被破坏了。有什么办法可以解决吗?
UPD:我已阅读常见问题解答,但我的问题仍在发生,也许有人设法解决了?
为了解决这类问题,我所做的就是围绕 cmake 编写一个小包装器 Makefile。我将Makefile放在项目根目录下,内容如下:
all: cmake
cmake:
[ -f build/CMakeCache.txt ] && [ "$$(pwd)" != "$$(grep 'CMAKE_HOME_DIRECTORY:INTERNAL' build/CMakeCache.txt | cut -d '=' -f 2)" ] \
&& rm -rf build || true
mkdir -p build && cd build && cmake ..
make -C build
clean:
rm -rf build
Run Code Online (Sandbox Code Playgroud)
可能有一种更干净的方法来做到这一点,但它对我有用:
make # build in one directory
cd ..
olddir=$(basename $OLDPWD) && rsync -ravz $olddir ${olddir}-test && cd ${olddir}-test # copy to another directory
make # running make in the new dir triggers a full rebuild
make # running make a second time in the new dir does not rebuild
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4716 次 |
| 最近记录: |