4

私は、Cプログラム(どちらの言語もわかりません)用のC ++-Qt-GUIを、CMakeを使用するKDevelopを使用して作成することにしました。

Cソースにはヘッダーがないので、ヘッダーを作成し、いくつかの構造体をヘッダーに移行しました。また、Cソースで呼び出す必要がある唯一の関数の宣言も行いました。

問題は、CMakeがCファイル(したがって定義)を見つけられないか、CMakeLists.txtのソースセットにCソースを追加すると、両方が文句を言うため、呼び出すことができないことです。私のmain.cppとCソースファイルには主な機能があります。

ヘッダーで宣言したCファイルの関数のみを使用可能にする必要があることをCMakeに伝えるにはどうすればよいですか?

はい、これ:

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

4 に答える 4

2

Cファイルをライブラリとしてコンパイルし、実行可能ファイルにリンクしてみてください。

add_library(clib oregengui/oregengui.c)
[...]
add_executable(oregengui ${oregengui_SRCS})
target_link_libraries(oregengui ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} clib)
于 2011-01-25T14:53:13.023 に答える
1

私はこれについて少しさびていますが、次のようなことをしていただけませんか。

oregengui.cで

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

両方が必要なCMakeLists:

add_definitions( -DMYGUIPROJ )

その後、コンパイラは2番目のメイン関数を無視する必要があります。

于 2011-01-25T14:42:43.623 に答える
0

プログラムに同時に2つの主要な機能を含めることはできません。プロジェクトに含めたCファイルのmain関数の名前を変更してみてください。これはソースへの大きな変更ではありませんが、ローカルで行う必要があります。

于 2011-01-25T12:28:33.700 に答える
0

Cプログラムにmain関数がある場合は、独立して実行できます。では、QProcess :: execute()メソッドを使用してqtからアプリケーションを呼び出し、出力を取得してみませんか?

于 2011-01-25T12:36:05.223 に答える