我决定使用 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 函数。