我决定使用 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 源代码我不想改动太多,因为它是一个独立的项目。我猜开发人员会接受标题的引入,但不会更多。

最佳答案

我对此有点生疏,但你能不能做一些类似的事情:

在oregengui.c中

#if !defined MYGUIPROJ
int main() {
...
}
#endif

在你想要的 CMakeLists 中:
add_definitions( -DMYGUIPROJ )

然后编译器应该忽略你的第二个 main 函数。

10-06 10:24