使用 Qt/qmake 构建 JVMTI 代理

Build JVMTI Agent with Qt/qmake

在我成功实现我的第一个 JVMTI 代理并使用 g 编译器完成构建后,我想将构建过程集成到我的 Qt 项目中。

但是我面临一些构建过程配置问题:

我将使用 g 编译器运行的参数如下所示:

1
g++ -fPIC -shared agent.cpp -o libagent.so -I /usr/lib/jvm/java-6-openjdk/include -I /usr/lib/jvm/java-6-openjdk/include/linux

这很好用。现在到 qmake:

我知道参数 CXXFLAGS 可以向 qmake 使用的 C 编译器添加更多参数,但是如何将这个参数化编译器调用转换为 qmake?


在 Qt Undocumented qmake 的帮助下,我在 qmake 中找到了一个自定义配置。但是,它并非完美无缺,它现在生成了一个 libagent.so 和一个不需要的 agent.o。

1
2
3
4
5
6
7
8
SOURCES_AGENT = agent.cpp
agent.name = agent
agent.input = SOURCES_AGENT
agent.dependency_type = TYPE_C
agent.variable_out = OBJECTS
agent.output = libagent.so
agent.commands = $${QMAKE_CXX} $(CXXFLAGS) -fPIC -shared  -o libagent.so $(INCPATH) ${QMAKE_FILE_IN}
QMAKE_EXTRA_COMPILERS += agent

我不知道具体的答案,但是……

由于 JVMTI 代理"通常"是无头的,您是否使用 qmake 是因为您的项目有一个您正在 kdevelop/qtcreator 中开发的头?头部是否使用附加 API?

如果不是并且它纯粹是无头的,那么不同的编辑器/cmake 会不会更好? qmake 现在是 cmake 的 preproc,对于 MOC 的东西,不是吗?

我必须承认我对 q/cmake 有点模糊,尽管我希望为我的工作转向 cmake。