Включить другой проект CMake в качестве библиотеки - PullRequest
4 голосов
/ 25 января 2011

Я решил создать C ++ - Qt-GUI для программы на C (оба языка, на которых я не знаю), используя 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, так как это независимый проект. Я предполагаю, что разработчик примет введение заголовка, но не намного больше.

Ответы [ 4 ]

2 голосов
/ 25 января 2011

Попробуйте скомпилировать файл C как библиотеку и связать его с исполняемым файлом.

add_library(clib oregengui/oregengui.c)
[...]
add_executable(oregengui ${oregengui_SRCS})
target_link_libraries(oregengui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} clib)
1 голос
/ 25 января 2011

Я немного заржавел, но не могли бы вы сделать что-то вроде:

В oregengui.c

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

В ваших списках CMake, которые вы хотите использовать в:

add_definitions( -DMYGUIPROJ )

Компилятор должен игнорировать вашу вторую основную функцию.

0 голосов
/ 25 января 2011

если ваша C-программа имеет основную функцию, то она может быть выполнена независимо. Так почему бы не использовать метод QProcess :: execute () для вызова приложения из qt и получения вывода?

0 голосов
/ 25 января 2011

Ваша программа не может содержать две основные функции одновременно.Просто попробуйте переименовать основную функцию в C-файле, который вы включили в свой проект.Это не большое изменение в источнике, но вам придется делать это локально.

...