2014-01-30 75 views
2

我正在使用源文件生成器應用程序來生成使用CMake編譯的其他應用程序的源文件(在一個項目中的noth)。如何用cmake強制重新編譯應用程序

基本設置是這樣的:

a. generator 

b. something_else 

The generator is a few CPP files linked together 

The something_else is: 

a. a few "normal" CPP files 

b. generated CPP/h files which I have to link in. 
    These CPP files are generated by the generator 

該發電機在配置階段配置有一些選擇,這取決於這些選項所產生的文件的內容是不同的。

問題出現在這裏:CMake compile time generation of source(連同解決方案)。

現在,當我使生成器被編譯和執行,然後some_else被編譯和鏈接。

不過,現在我有以下問題:如果我修改發電機的來源,並在build目錄發電機可執行程序重新編譯和鏈接執行一個牌子,但它不被執行,也不是something_else重新編譯和鏈接,所以我必須再次make cleanmake爲了讓生成器執行。

問題是:是否有可能讓cmake重新運行生成器以防修改它的來源?如果是,如何?

回答

2

那麼,你應該引入發電機編譯目標和源生成目標之間的人爲依賴。

您應該從提到的SO問題中將以下內容添加到CMakeLists.txt中,正如Ronny Andersson在該頁面上的回答中所建議的那樣。

  1. 在add_custom_command中使用MAIN_DEPENDENCY參數來引入「頂級」源和生成的文件之間的依賴關係。
  2. 使用取決於參數引入其他相關性,如作爲,以及,與所述參數生成它建立
  3. 標記產生源的發電機(如果發電機的創建被添加像add_binary(generator_name generator_source1... generator_source2...)然後使用generator_name作爲依賴名稱)的目標依賴性PROPERTIES GENERATED 1 in add_custom_command

這三個參數在CMake生成的Makefile中創建了一個適當的依賴關係鏈。請參閱SWIG_ADD_SOURCE_TO_MODULE底部的文本/usr/share/CMake/Modules/UseSWIG.cmake(或您的CMake分發內部駐留的任何位置)的底部,查看完成的任務,以解決與您的基本相同的任務。

+0

CMakeLists.txt基本上是從接受的答案來自http://stackoverflow.com/questions/21406429/cmake-compile-time-generation-of-source – fritzone

+0

更新了答案。 – user3159253

+0

這太棒了!有用! – fritzone

0

只有當任何CMakeLists.txt或* .cmake文件被修改時,CMake纔會重新運行。 可以修改一個技巧 然後你可以通過修改cmake文件來實現這個技巧,所以CMake會再次被觸發。

相關問題