我决定使用KDevelop为C程序(我不知道的两种语言)制作C ++ - Qt-GUI,而KDevelop又使用CMake。
C源没有头,所以我创建了一个,并将一些结构迁移到它中,以及我需要调用的C源中唯一函数的声明。
问题是我无法调用它,因为CMake没有找到C文件(因而也没有找到定义),或者当我将C源添加到CMakeLists.txt中的源集时,它抱怨我的main.cpp和C源文件都有主要功能。
如何告诉CMake它应该只使用我在标题中声明的C文件中的函数?
就是这样:
project(oregengui)
cmake_minimum_required(VERSION 2.6)
find_package(Qt4 REQUIRED)
include_directories(${QT_INCLUDES} ${CMAKE_CURRENT_BINARY_DIR})
set(oregengui_SRCS oregengui.cpp main.cpp qrangeslider/qrangeslider.cpp)
#as soon as i add oregengui/oregengui.c, it won’t work because of the main function
qt4_automoc(${oregengui_SRCS})
add_executable(oregengui ${oregengui_SRCS})
target_link_libraries(oregengui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
PS:我不想太多地改变C源,因为它是一个独立的项目。我想开发人员会接受标题的引入,但不会更多。
答案 0 :(得分:2)
尝试将C文件编译为库并将其与可执行文件链接。
add_library(clib oregengui/oregengui.c)
[...]
add_executable(oregengui ${oregengui_SRCS})
target_link_libraries(oregengui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} clib)
答案 1 :(得分:1)
我对此有点生疏,但你可以做一些事情:
在oregengui.c
#if !defined MYGUIPROJ
int main() {
...
}
#endif
在你想要的CMakeLists中:
add_definitions( -DMYGUIPROJ )
编译器应该忽略你的第二个主要功能。
答案 2 :(得分:0)
您的程序不能同时包含两个主要功能。只是尝试重命名包含在项目中的C文件中的main函数。这不是对源的重大改变,但您必须在本地执行此操作。
答案 3 :(得分:0)
如果你的C程序有一个main函数,那么它可以独立执行。那么为什么不使用QProcess::execute()方法从qt调用应用程序并获取输出呢?