2017-04-24 8 views
0

gakeビルドをcmakeビルドに変換中です。アプリケーションはgmakeでうまく構築されますが、cmakeを使用すると以下のエラーが表示されます。 以下はgmakeとcmakeファイルです。cmakeでエラーが発生しました:「stat64の相反するタイプ」

親のMakefile

CC  := gcc 
CFLAGS := -g -w -m32 
INC_DIR := ../includes 
OBJ_DIR := ../objects 
BIN_DIR := ../bin 

子のMakefile

include ../../Makefile 

SHR_FX := ../$(OBJ_DIR)/shrfx.o 
SHRXML := ../$(OBJ_DIR)/shrxml.o 
TMP_BIN_DIR = ../$(BIN_DIR) 
TMP_INC_DIR = ../$(INC_DIR) 

EXECUTABLES := common flogmon 
all: $(EXECUTABLES) 

%: %.c OAhelper.c OAhelper.h $(SHR_FX) $(TMP_INC_DIR) 
    @-rm -f [email protected] ## QUIET (@). CONTINUE IF FILE NOT FOUND (-) 
    $(CC) $(CFLAGS) -I $(TMP_INC_DIR) $(LDLIBPATHFLAGS) -o [email protected] [email protected] OAhelper.c $(SHR_FX) 
    @-chmod 0775 [email protected] #SH(@),CONT(-). Allow others to do it. 
    mv [email protected] $(TMP_BIN_DIR) 

親CMakeList.txt

cmake_minimum_required(VERSION 2.8.9) 
project(program) 
set(CMAKE_BUILD_TYPE Release) 
set (EXECUTABLE_OUTPUT_PATH "/home/user/workspace/program") 

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -w -m32") 

add_subdirectory(opaid/opaid_helper) 

子CMakeList.txt

cmake_minimum_required(VERSION 2.8.9) 

#Bring the headers 
include_directories(../../includes) 

set (PROJ_LIST "common;flogmon") 

message (STATUS "CFLAGS : " ${CMAKE_C_FLAGS}) 
foreach (PROJ ${PROJ_LIST}) 
    project(${PROJ}) 
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath=${EXECUTABLE_OUTPUT_PATH}:${EXECUTABLE_OUTPUT_PATH}../RSA/cryptocme3001/library/lib") 
    add_executable(${PROJ} ${PROJ}.c OAhelper.c) 
    target_link_libraries(${PROJ} LINK_PUBLIC shrfx) 
    install(TARGETS ${PROJ} DESTINATION ${EXECUTABLE_OUTPUT_PATH}) 
endforeach() 

私CMAKEList.txtにこれを追加する

Building C object /CMakeFiles/common.dir/common.c.o 
In file included from /usr/include/features.h:375:0, 
    from /usr/include/sys/poll.h:22, 
    from /usr/include/poll.h:1, 
    from /home/user/workspace/program/src/common.c:26: 
/usr/include/sys/stat.h:503:1: error: conflicting types for ‘stat64’ 
__NTH (stat64 (const char *__path, struct stat64 *__statbuf)) 
^ 
In file included from 
/home/user/workspace/program/src/../../includes/fxgen.h:205:0, 
    from /home/user/workspace/program/src/../../includes/fx.h:286, 
    from /home/user/workspace/program/src/common.c:39: 
/usr/include/sys/stat.h:229:12: note: previous declaration of ‘stat64’ 
was here extern int stat64 (const char *__restrict __file, 

私は/usr/include/sys/stat.hで見れば...

503 
# if defined __USE_LARGEFILE64 \ 
    && (! defined __USE_FILE_OFFSET64 \ 
     || (defined __REDIRECT_NTH && defined __OPTIMIZE__)) 
__extern_inline int 
__NTH (stat64 (const char *__path, struct stat64 *__statbuf)) 
{ 
    return __xstat64 (_STAT_VER, __path, __statbuf); 
} 

229 
#ifdef __USE_LARGEFILE64 
extern int stat64 (const char *__restrict __file, 
      struct stat64 *__restrict __buf) __THROW __nonnull ((1, 2)); 
extern int fstat64 (int __fd, struct stat64 *__buf) __THROW __nonnull ((2)); 
#endif 
+1

'make VERBOSE = 1'を実行し、gmakeの起動時にコマンドラインの違いを確認してください。 – Tsyvarev

+1

最後のエラーラインの最後の部分が欠落しているように見えます。しかし、それは大きな問題ではないでしょう。おそらく 'struct stat64 * __ statbuf);やそれに類するものがあります。 2つの互換性のない 'stat64()'の宣言を可視にするために、 'common.c'または' fx.h'と 'fxgen.h'ヘッダーが何をしているのかを追跡する必要があります。問題は 'common.c'によって以前にインクルードされていた別のヘッダーにある可能性があります。 ( 'gcc -H'を使うとインクルードされている全てのファイルがリストに含まれているので、それも参考になります) –

+0

CMakeは[g] makeの類推ではありません。それはAutotoolsのラインに沿っています。確かに、CMakeによって生成されたmakefileは、古いmakefileを扱うすべてのプラットフォーム上でgmake(== GNU make)によって処理される可能性があります。 –

答えて

0

は、問題解決のエラー:

STRINGを

関連する問題