开发者

Include another CMake Project as Library

开发者 https://www.devze.com 2023-02-06 20:18 出处:网络
I have decided to make a C++-Qt-GUI for a C program (both languages I don’t know), using KDevelop, which in turn uses CMake.

I have decided to make a C++-Qt-GUI for a C program (both languages I don’t know), using KDevelop, which in turn uses CMake.

The C source has no header, so I made one, and migrated some structs into it, as well as the declaration of the only function in the C source i need to call.

The problem is that I can’t call it, because either CMake doesn’t find the C file (and hence the definition), or, when I add the C source to my source set in the CMakeLists.txt, it complains that both my main.cpp and the C source file have main functions.

How do I tell CMake that it should only make the function from the C file available which I declared in the header?

here is it:

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: I don’t want to change the C source too much, since it is a independant pr开发者_如何学运维oject. I guess the developer will accept the introduction of the header, but not much more.


Try compiling C file as library and linking it with executable.

add_library(clib oregengui/oregengui.c)
[...]
add_executable(oregengui ${oregengui_SRCS})
target_link_libraries(oregengui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} clib)


I'm a bit rusty on this, but could you do something along the lines of:

In oregengui.c

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

In your CMakeLists that you want both in:

add_definitions( -DMYGUIPROJ )

The compiler should then ignore your second main function.


Your program cannot contain two main functions at the same time. Just try to rename the main function in the C file you included to your project. This is not a big change to the source, but you will have to do it locally.


if your C program has a main function, then it can be executed independently. So why not use the QProcess::execute() method to invoke the application from qt and get the output?

0

精彩评论

暂无评论...
验证码 换一张
取 消