我有一個使用GNU Autotools的項目QPhiX。有一個非常相關的項目叫做QPhiX-Codegen,它是前者需要的。整體構建過程如下所示:運行配置時運行腳本
- 在QPhiX-Codegen中運行
make
。這將編譯代碼生成器並運行它。運行時,它會創建平坦的C++代碼。 - 運行一個Python腳本,該腳本使用模板引擎將該平面C++代碼封裝到完整的頭文件和源代碼文件中。這也會創建一個
CMakeLists.txt
,這樣生成的代碼就可以被編譯。 - 運行
cmake
和make
對cmake
生成的Makefile
將生成的代碼編譯成靜態庫libqphix_codegen.a
。
這三樣東西都包裝在Bash腳本中,用./generate-and-compile $isa $cxx $cxxflags
調用。 ISA可以是AVX2
,C++編譯器可以我mpiicpc
。
然後一個切換目錄QPhiX並繼續構建過程:
- 運行
./configure ... --enable-arch=ISA --with-codegen=path/to/codegen/directory CXX=$CXX CXXFLAGS=$CXXFLAGS
創建Makefile
。在該Makefile
中,它將具有所需的編譯器標誌以包含生成的頭文件並鏈接到libqphix_codegen.a
。 - 運行
make
對./configure
生成的Makefile
。
該過程向用戶公開了比真正需要更多的步驟。此外,用戶必須將相同的ISA標誌(CXX
和CXXFLAGS
)傳遞給兩個不同的腳本。然後,他們還必須將代碼生成器的路徑放入./configure
。
我認爲在QPhiX項目中讓代碼生成器成爲git子模塊是最方便的。然後,./configure
可以運行codegen/generate-and-compile
腳本並將選項傳遞給它。
我的問題是:我將如何在./configure
中運行腳本?我只是把我想要的片段放入configure.ac
?該文件看起來像一個shell腳本與一些宏,但我不知道這是否是正確的地方把它放在。
另請參閱Automake手冊中的[27.8 Per-Object Flags Emulation](https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html)。 – jww