2017-05-21 110 views
0

我想你的幫助,因爲我是CMake的新手。假設我有一個可執行目標T,它取決於源文件A.c,B.cpp和c.cpp。我想用特定的標誌編譯A.c並創建目標文件A.o.爲了簡單起見,我們假設B和C將用g ++編譯成相同的一組標誌,並且相應的目標文件應該被創建爲B.o C.o.然後我可以鏈接這些對象文件並用gcc生成T。我知道我可以用普通的makefile在幾個步驟中完成它。基本上,我無法用特定標誌編譯A.c,而使用相同標誌編譯其餘的文件。我不知道CMake應該怎麼做?如何使用CMake爲單個目標編譯具有不同選項的不同源文件?

add_executable(T A.c B.cpp C.cpp) 

我知道的CMake提供target_compile_options()但我不如何使用它我的情況?我想它可以設置爲目標的全局標誌,但不是爲了我的目標!

+0

我最終什麼事做的是創造了交流的另一個庫的目標,但是在[這裏](https://cmake.org/Wiki/CMake/Tutorials/描述的對象參數傳遞Object_Library)與所需的選項和標誌。對於實際的目標,我可以使用'add_executable(T B.cpp C.cpp $ )'。因此,B和C將與其他選項一起編譯,然後將與A.o.鏈接。 – Aref

回答

0

如果您想爲單個源文件設置特定標誌,則需要使用源文件屬性。您使用set_property(SOURCE...)set_source_files_properties()來做到這一點。您可能感興趣的來源屬性爲COMPILE_DEFINITIONSCOMPILE_FLAGS。例如:

# set_source_files_properties() always replaces any previous value 
set_source_files_properties(A.c PROPERTIES 
    COMPILE_DEFINITIONS MySpecialOption=1 
) 

# Only set_property() allows appending to existing values 
set_property(SOURCE A.c APPEND_STRING PROPERTY 
    COMPILE_FLAGS " -Wno-unused" 
) 
相關問題