有没有办法将命令参数/选项传递给makedepend
生成cmake
版本期间进行的make
调用?
我想将-D
参数传递给makedepend
,以便某些#include
被忽略,因为它们被隐藏了此构建始终为false的条件。
这是一个激励人心的例子。
在A.cpp
:
#include "B.h"
int main(){}
在B.h
:
#ifndef B_H
#define B_H
void B();
#ifndef NOT_HEADER_ONLY
# include "B.cpp"
#endif
#endif
在B.cpp
:
#include "B.h"
void B(){}
在CMakeLists.txt
:
cmake_minimum_required(VERSION 2.8.6)
option(NOT_HEADER_ONLY "Off")
set(SRCFILES "A.cpp")
if(NOT_HEADER_ONLY)
add_definitions(-DNOT_HEADER_ONLY)
list(APPEND SRCFILES "B.cpp")
endif()
add_executable(A ${SRCFILES})
如果我使用:
mkdir build
cd build
cmake .. -DNOT_HEADER_ONLY=Off
make
只有A.cpp
直接编译(如预期的那样),如果我touch B.cpp
,则会触发A.cpp
进行重新编译(如预期的那样)。
如果而不是我使用:
cmake .. -DNOT_HEADER_ONLY=On
make
依赖性过于保守,因为它们永远不会错过依赖关系,但如果触及B.cpp
,则会触发A.cpp
重新编译,尽管#include "B.cpp"
B.h
内的#ifndef NOT_HEADER_ONLY
内隐藏{1}} {自定义NOT_HEADER_ONLY
。)
我意识到其他一些文件#undef NOT_HEADER_ONLY
导致B.cpp
成为B.h
的真正依赖,但我想假设这种情况永远不会发生。似乎makedepend
-D
选项已经为此做好了准备。确实makedepend -DNOT_HEADER_ONLY A.cpp
输出:
# DO NOT DELETE
A.o: B.h
但是如何告诉cmake使用makedepend -DNOT_HEADER_ONLY
而不仅仅是makedepend
?
(我甚至乐意破解cmake自动生成的Makefile
,但我无法找到makedepend
来电。
答案 0 :(得分:0)
这是一个非常极端的黑客,在这种情况下可以工作,但可能很难概括或可能有隐藏的效果。
而不是发出:
make
问题:
mkdir -p CMakeFiles/A.dir/hole
makedepend -DNOT_HEADER_ONLY -pCMakeFiles/A.dir/hole/ -o .cpp.o -f - ../A.cpp ../B.cpp -w0 > CMakeFiles/A.dir/depend.make
make -f CMakeFiles/A.dir/build.make CMakeFiles/A.dir/build
这会创建一个虚拟文件夹(因此../
会有意义),然后直接调用makedepend
而不是让cmake
确定依赖关系,然后调用实际的构建make
命令直接