2
gcc (GCC) 4.7.2
cmake version 2.8.11  

こんにちは、

次の問題を回避する方法があるかどうか疑問に思っています。以下に強調しました。

SET(GW_SOURCE_FILES 
  module.c 
  module_imp.c 
  module_message.c
  module_config.c
  module_queue.c)

# Compiles the source files to create the shared library called dlg_gw.so
ADD_LIBRARY(dlg_gw SHARED ${GW_SOURCE_FILES}) 

# Link additional libraries to this
TARGET_LINK_LIBRARIES(dlg_gw gc srl ${APRUTIL})

# ISSUE: Now I want to create my executable using the same source files. module.c is where my 'void main(void)' is. 
# However, I have some functions in there which will also be part of the library.
# However, this will recompile the same source files all over again. I don't really like that behaviour.
ADD_EXECUTABLE(sun_gw ${GW_SOURCE_FILES})

# After the executable is created, link the libraries with it.
TARGET_LINK_LIBRARIES(sun_gw ${APR} driver dlg_gw dlg_sip dlg_ss7 dlg_isdn)

同じソース ファイルを 2 回コンパイルしているため、上記の問題を確認していただければ幸いです。一度dlg_gwライブラリを作成します。次に、実行可能ファイルを作成しますsun_gw

「void main(void)」を取り出して、runtime.c という名前の新しいファイルに入れ、次のことを行うことを考えていました。

ADD_EXECUTABLE(sun_gw runtime.c)

ただし、上記では、ソース コードの一部を変更する必要があります。

他の提案をありがとう、

4

1 に答える 1

5

CMake 2.8.8 で導入された「OBJECT」ライブラリ タイプを使用して、同じファイルの繰り返しビルドを回避できます。

http://www.cmake.org/Wiki/CMake/Tutorials/Object_Libraryを参照してください

于 2013-06-20T13:25:34.330 に答える