如何将参数传递给cmake进行的makedependent调用
How can I pass arguments to the makedepend calls made by cmake?
是否有方法将命令参数/选项传递给在cmake
生成的make
生成期间进行的makedepend
调用?
我想将一个-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
被直接编译(如预期),如果Itouch B.cpp
,则A.cpp
将被触发进行重新编译(如预计)。
如果而,我使用:
cmake .. -DNOT_HEADER_ONLY=On
make
相关性过于保守,因为它们永远不会错过相关性,但如果触摸B.cpp
,则触发A.cpp
进行重新编译,尽管B.h
内的#include "B.cpp"
被#ifndef NOT_HEADER_ONLY
隐藏(因为定义了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
调用)。
这里有一个非常极端的破解方法,在这种情况下可以工作,但可能很难推广,或者可能有隐藏的效果。
代替发行:
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
命令。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 函数调用中参数的顺序重要吗
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在c++类上调用void函数
- 为什么 std::unique 不调用 std::sort?
- 调用专用模板时出错"no matching function for call to [...]"
- 选择要调用的构造函数
- C++为什么尽管我调用了void函数,它却不起作用
- 构造函数正在调用一个使用当前类类型的函数
- 变量没有改变?通过向量的函数调用
- 没有为自己的结构调用列表推回方法
- 调用'begin(int [n])'没有匹配函数
- 什么时候调用析构函数
- 如何用参数值调用函数(仅在运行时已知)
- std::cout.imbue()多重调用
- 如何将参数传递给cmake进行的makedependent调用